当前位置: 首页 > 面试题库 >

以UTF-16或UTF-32编码JSON

郭翰墨
2023-03-14
问题内容

该JSON RFC,第2.5节,说部分:

为了转义不在“基本多语言平面”中的扩展字符,该字符表示为十二个字符的序列,对UTF-16代理对进行编码。因此,例如,仅包含G谱号字符(U +
1D11E)的字符串可以表示为“ \ uD834 \ uDD1E”。

假设我有合理的理由将JSON编码为UTF-16BE(允许)。这样做时,是否仍然需要转义基本多语言平面中没有的字符?例如,代替此:

00 5C 00 75 00 44 00 38 00 33 00 34 00 5C 00 75 00 44 00 44 00 31 00 45
  \     u     D     8     3     4     \     u     D     D     1     E

这是的24字节UTF-16BE字节序列\uD834\uDD1E,这样做是否合法:

D8 34 DD 1E

即直接使用4字节的UTF-16BE值?

同样,如果我要编码与UTF-32BE相同的JSON字符串,我是否可以直接使用代码点值:

00 01 D1 1E


问题答案:

据我所知,是的,您可以直接编写UTF-16值。支持:您引用的RFC段落说明了 如果决定 转义任意Unicode的方式, 如何 转义
。但是,在同一部分的前面,RFC表示

__除必须转义的字符外, 所有 Unicode字符 可以放在引号内:引号,反斜线和控制字符(U +
0000至U + 001F)。 __

任何字符 可以转义。如果字符在基本多语言平面中(U + 0000到U + FFFF),则可以将其表示为六个字符的序列…

(已添加重点。)

对我来说,这是说只"\和控制字符 必须 进行转义,任何其他Unicode字符 可以
被放置原样直接进入JSON文本(在任何UTF形式您正在使用)。这也对我说,即使你是编码为UTF-8,你并不需要使用\uXXXX表单以外的任何Unicode字符"\和控制字符。

(顺便说一句,这的确使我想知道该\uXXXX表单是否对控制字符以外的其他内容是否真的有用。正如另一个张贴者所说,它可能归结为您的JSON解析器实际支持的内容。)



 类似资料:
  • 问题内容: 现在考虑下面给出的代码: 当我尝试调试上面代码中的行时,调试器将我带到String类的方法中,然后将我带到StringCoding类的方法中。在调试过程中,encode方法的第一行()返回“ UTF-8”作为默认编码。我希望它是“ UTF-16”。 该程序的输出为: 最= 6700的Unicode值UTF-8字符=最| 默认值:字节数= 3 对应的UTF-16字符= UTF-16:字节

  • 问题内容: 我试图理解Java中的字符编码。Java中的字符使用UTF-16编码以16位存储。因此,当我将包含6个字符的字符串转换为字节时,我将得到如下所示的6个字节,但我希望它是12。是否缺少任何概念? O / p:字符数组的长度为6 根据@Darshan尝试使用UTF-16编码获取字节时,结果也不期望。 问题答案: 在UTF-16版本中,由于插入了一个标记来区分Big Endian(默认)和L

  • 我试图理解Java中的字符编码。Java中的字符使用UTF-16编码以16位存储。因此,当我将一个包含6个字符的字符串转换为字节时,我得到了6个字节,如下所示,我期望它是12。我是不是漏掉了什么概念? O/p:字符数组的长度为6 按照@Darshan的说法,当尝试使用UTF-16编码获取字节时,结果也不是预期的。

  • 世界中的字符有许许多多,有英文,中文,韩文等。我们强烈需要一个大大的映射表把世界上的字符映射成计算机可以阅读的二进制数字(字节)。 这样,每个字符都给予一个独一无二的编码,就不会出现写文字的人和阅读文字的人编码不同而出现无法读取的乱码现象了。 于是Unicode就出现了,它是一种所有符号的编码映射。最开始的时候,unicode认为使用两个字节,也就是16位就能包含所有的字符了。 但是非常可惜,两个

  • 根据统一码规范 D91 UTF-16 编码形式:在 U 0000..U D7FF 和 U E000 范围内分配每个 Unicode 标量值的 Unicode 编码形式。U FFFF 到与 Unicode 标量值具有相同数值的单个无符号 16 位代码单元,并将 U 10000..U 10FFFF 范围内的每个 Unicode 标量值分配给代理项对。 术语“标量值”是指 Unicode 码位,即必须通

  • 问题内容: 我想从请求中获取参数(带有重音符的字符),但是它不起作用。我尝试使用,但也没有用。 我知道返回正确的字符,但不起作用! 有人有主意吗? 问题答案: Paul的建议似乎是最好的做法,但如果要解决此问题,则根本不需要URLEncoder或URLDecoder: 更新: 由于获得了很多选票,我想强调BalusC的观点,即这绝对不是解决方案。充其量是一种解决方法。人们不应该这样做。 我不知道是