Bläddra i källkod

fix #286 calcHash should use byte not rune to calc hash

Tao Wen 7 år sedan
förälder
incheckning
0260c89b54
2 ändrade filer med 9 tillägg och 7 borttagningar
  1. 6 7
      iter_object.go
  2. 3 0
      type_tests/struct_tags_test.go

+ 6 - 7
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)

+ 3 - 0
type_tests/struct_tags_test.go

@@ -145,6 +145,9 @@ func init() {
 		(*struct {
 			Field bool `json:",omitempty,string"`
 		})(nil),
+		(*struct {
+			Field bool `json:"中文"`
+		})(nil),
 	)
 }