我正在使用 GAE 中的 Go 运行时编写 Web 应用程序。
我正在保存一个包含字符串的结构,它是用 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
这工作正常,在保存或检索存储的实体(通过代码)时没有提示,但是,在加载数据存储查看器时,我收到一条错误消息,内容类似于“获取实体时出错:Property Foo is corrupt in数据存储
”,然后是一个带有一堆对内部 GAE 文件的引用的回溯,然后是这个:“UnicodeDecodeError:'utf8' 编解码器无法解码位置 1 中的字节 0x85:意外代码字节
”。这不会发生在本地开发 Datastore Viewer 中,只会发生在实时生产中。
所以我的问题是:hex.EncodeToString()
使用什么编码?有没有办法指定 utf-8 输出?这是一个 GAE 错误,还是一个糟糕的编码错误?
提前谢谢你。
最佳答案
问题是流氓行将 hashedFoo.Sum()
直接转换为字符串并将其分配给 encodedFoo
。这产生了一些字符串,其中包含 utf-8 无法识别的字符。
hex.EncodeToString()
工作正常。
我想这是我自己的一个教训,让我的代码保持干净整洁:)
关于google-app-engine - GAE 数据存储查看器中的 utf8 错误(Go 运行时),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057899/