我正在使用GAE中的Go运行时编写一个webapp。
我正在保存一个包含字符串的结构,这是用MD5对另一个字符串的字节进行哈希处理,然后将哈希和字节编码为带有十六进制的字符串的结果。
以下是一些代码:
foo := "some string"
hashedFoo := md5.New()
hashedFoo.Write([]byte(foo))
encodedFoo := hex.EncodeToString(hashedFoo.Sum()) // this is what I'm assigning to my struct, and then saving into the Datastore
这样可以正常工作,在保存或检索存储的实体时没有抱怨(通过代码),但是,在加载数据存储区查看器时,我收到类似“Error fetching entities: Property Foo is corrupt in the datastore
”的错误,然后有一个错误跟踪内部GAE文件的一堆引用然后:“UnicodeDecodeError: 'utf8' codec can't decode byte 0x85 in position 1: unexpected code byte
”。这不会发生在本地开发数据存储查看器中,只会在实时生产中发生。
所以我的问题是:hex.EncodeToString()
使用什么编码?有没有办法指定utf-8输出?这是一个GAE错误,还是一个错误的编码错误?
提前谢谢。
答案 0 :(得分:1)
问题是流氓行将hashedFoo.Sum()
直接投射到字符串中并将其分配给encodedFoo
。这产生了一些字符串,字符不能被utf-8识别。
hex.EncodeToString()
效果很好。
我想这对我自己来说是一个教训,让我的代码保持干净整洁:)