diff --git a/iter_object.go b/iter_object.go index 6e7c370a..1c575767 100644 --- a/iter_object.go +++ b/iter_object.go @@ -2,7 +2,7 @@ package jsoniter import ( "fmt" - "unicode" + "strings" ) // ReadObject read one field from object. @@ -96,13 +96,12 @@ func (iter *Iterator) readFieldHash() int64 { } func calcHash(str string, caseSensitive bool) int64 { + if !caseSensitive { + str = strings.ToLower(str) + } hash := int64(0x811c9dc5) - for _, b := range str { - if caseSensitive { - hash ^= int64(b) - } else { - hash ^= int64(unicode.ToLower(b)) - } + for _, b := range []byte(str) { + hash ^= int64(b) hash *= 0x1000193 } return int64(hash) diff --git a/type_tests/struct_tags_test.go b/type_tests/struct_tags_test.go index 6b111faa..66834b87 100644 --- a/type_tests/struct_tags_test.go +++ b/type_tests/struct_tags_test.go @@ -145,6 +145,9 @@ func init() { (*struct { Field bool `json:",omitempty,string"` })(nil), + (*struct { + Field bool `json:"中文"` + })(nil), ) }