GAE数据存储查看器中的utf8错误(Go运行时)

时间:2012-01-29 23:50:20

标签: google-app-engine google-cloud-datastore go

我正在使用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错误,还是一个错误的编码错误?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

问题是流氓行将hashedFoo.Sum()直接投射到字符串中并将其分配给encodedFoo。这产生了一些字符串,字符不能被utf-8识别。

hex.EncodeToString()效果很好。

我想这对我自己来说是一个教训,让我的代码保持干净整洁:)