嗯,主题说了一切。我正在使用json_encode将一些UTF8数据转换为JSON,我需要将其传输到当前仅限ASCII的某个层。所以我想知道我是否需要让它知道UTF-8,或者我可以保留原样。
看看JSON rfc,UTF8在JSON输出中也是有效的字符集,虽然不推荐,即一些实现可以在其中留下UTF8数据。问题是PHP的实现是否转换为ASCII或者选择保留为UTF-8。
答案 0 :(得分:6)
与other languages中的JSON支持不同,json_encode()
无法生成其他而不是ASCII。
答案 1 :(得分:3)
根据Wikipedia中的JSON文章,字符串中的Unicode字符始终为
使用反斜杠转义的双引号
json_encode()
上的PHP手册中的示例似乎证实了这一点。
因此,ASCII / ANSI之外的任何UTF-8字符都应该像这样转义:\u0027
(注意,正如@Ignacio在评论中指出的那样,这是推荐的方式处理这些字符,而不是必需一个
但是,我想json_decode()
会将字符转换回字节值吗?你可能会遇到麻烦。
如果您需要确定,请先查看可能会将您的UTF-8字符串转换为ASCII(删除任何不受支持的字符)的iconv()。
答案 2 :(得分:0)
好吧,json_encode
返回一个字符串。根据{{3}}:
字符串是一系列字符。在PHP 6之前,字符与字节相同。也就是说,可能有256个不同的字符。这也意味着PHP没有Unicode的原生支持。有关一些基本的Unicode功能,请参阅utf8_encode()和utf8_decode()。
所以暂时你不必担心让它知道UTF-8。当然,你仍然可能想要考虑这个问题,以便将来证明您的代码。