我们有一个包含以下Unicode十六进制值的json文件。
[{
"name": "Test",
"description": "\\0x3059\\0x3079\\0x3066\\0x306E Test \\0x30DB\\0x30B9\\0x30C8\\0x7528\\0x306E\\0x30C7\\0x30D5\\0x30A9\\0x30EB\\0x30C8 \\0x30DB\\0x30B9\\0x30C8 \\0x30B0\\0x30EB\\0x30FC\\0x30D7\\0x3002"
}
]
在使用GSON库阅读时,我们有没有办法将这些Unicode十六进制值转换为UTF-8?
例如:
(读取器,JsonElement.class);
2条答案
按热度按时间afdcj2ne1#
如果我没弄错的话,您的字符串是类似UTF-16的,而不是UTF-8,因为16位代码的前缀是
\\0x
(我仍然不明白UTF-8和Unicode的神奇之处。)一种可能的解决方案是将整个输入缓冲到字符串缓冲区中,从\\0x
到\u
进行字符串替换,然后让Gson使用新的字符串。不确定这是不是一个好方法,因为字符串替换完全与上下文无关,可能会破坏这样的字符串。另外,字符串替换根本不关心JSON格式语法。另一个解决方案是扩展JsonReader
,这样Gson就可以自己解码这样的字符串而不破坏JSON语法。例如:
下面的解码器对
\0x
-前缀数的下四个字符不是十六进制数的情况失败。索引边界检查被委托给使用中的对象。当然,这是一个很大的改进领域。它的StringBuilder
被重用(不确定,但这可能会保存一些性能?)测试项目:
在真实的使用之前,应该首先对上面的代码进行良好的测试,并在必要时进行修复。
8gsdolmq2#
1.使用InputStreamReader以UTF-8之类的编码方式读取JSON文件
1.将数据从InputStreamReader转换为Object(所需的任何类型)
参考文献:
1.输入数据流读取器(输入数据流,%20java.nio.charset.charset)