【发布时间】:2016-09-28 20:22:37
【问题描述】:
我在 Go 中遇到了一些问题,我不知道该去哪里找。我正在从 MySQL 数据库中获取 UTF-8 字符串,并尝试以 JSON 响应的形式将其返回给客户端。
不同的客户端反应不同,但 iOS NSJSONSerialization 返回“未转义的控制字符”错误。这破坏了整个应用程序。不过,我可以使用 JSON.parse() 在 Chrome 中毫无问题地解码 JSON。
在服务器端,使用除 Go 之外的另一种语言编写的相同生成器函数可以正常工作。帮忙?
编辑:这是导致问题的 JSON:
{ "test":"☮️" }
...如果我省略这个表情符号,它会起作用。如果它在那里,它就不起作用。这个问题似乎与某些表情符号有两种不同的编码有关。一个似乎绊倒了 Go,但它们都是有效的。
为了演示编码的差异,一些表情符号会显示在数据库资源管理器中,而另一些则不会:
... 出现在数据库资源管理器中的这些问题以 100% 的可重现性导致了此问题。 但是,它们通常都出现在实际的客户端软件(不是数据库浏览器)中没有问题。我不知道是否有办法重新配置数据库连接以避免这种情况(或其他),但它似乎适用于不同的实例,具体取决于解码的内容以及它的宽容程度。考虑到用户可以键入或复制/粘贴任一编码...这需要始终如一地工作。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
包含导致错误的 JSON 将非常有帮助。
-
已发布。这是表情符号之一。没有它,它工作正常。
-
JSON 中
test的值为\u262e\ufe0f。第一个字符是PEACE SYMBOL;第二个是VARIATION SELECTOR-16。我怀疑后者的存在与否是导致表情符号显示或不显示的原因,以及错误。请确认。 -
我只尝试过完全使用和不使用表情符号,但我猜你可能在第二个字符上是对的。尽管如此,我遇到的问题是我无法控制用户输入,但出于某种原因,Golang 对此的翻译被客户端认为是无效的,但 PHP 中的相同脚本返回正常,没有任何处理问题。 (从同一个数据库中获取)
-
它对我来说很好用。也许“数据库浏览器”坏了?
标签: json go unicode emoji utf8mb4