在java中将UTF-16 unicode字符转换为UTF-8
Posted
技术标签:
【中文标题】在java中将UTF-16 unicode字符转换为UTF-8【英文标题】:Convert UTF-16 unicode characters to UTF-8 in java 【发布时间】:2012-02-22 22:33:03 【问题描述】:当我得到 JSON 时,会有 \u003c 和 \u003e 而不是 。我想在java中将它们转换回utf-8。任何帮助将不胜感激。谢谢。
【问题讨论】:
3c 和 3e 是<
和 >
。你需要转换任何东西来做什么?
How to convert Strings to and from UTF8 byte arrays in Java 的可能重复项
你使用的是什么 JSON 解析器?
确实,解码 JSON 字符串文字的正确方法是使用 JSON 解析器。不要尝试自己解码转义序列,因为您可能不会完全正确。 JSON 解析器会给你一个标准的 Unicode String 对象;如果您确实需要将其转换为 UTF-8 编码的字节,您可以使用 getBytes
,但我不确定这是否真的相关。
如果你使用StringEntitiy
,你应该看看这个answer。
【参考方案1】:
try
// Convert from Unicode to UTF-8
String string = "\u003c";
byte[] utf8 = string.getBytes("UTF-8");
// Convert from UTF-8 to Unicode
string = new String(utf8, "UTF-8");
catch (UnsupportedEncodingException e)
参考http://www.exampledepot.com/egs/java.lang/unicodetoutf8.html
【讨论】:
我也使用过这种技术,但它不起作用。它返回我通过的相同字符串......虽然它在测试应用程序中工作。下面是我正在使用的。 public static String unicodeToUTF8(String unicodeStr) // 从 Unicode 转换为 UTF-8 byte[] utf8 = unicodeStr.getBytes("UTF-8");字符串 UTF8Str=""; UTF8Str = new String(utf8, "UTF-8");返回 UTF8Str; 它在测试应用程序中工作意味着应用程序代码中存在一些问题,请检查您的应用程序中的函数unicodeToUTF8
我已经检查了很多时间,并且在测试和实时应用程序中 file.encoding 是相同的,即 cp1252。可能的选择是什么?
使用String string = "\u003c"
的测试应用程序起作用的原因是因为\u003c
是编译器转义,就像'\n' 是编译器转义一样。如果您想测试 JSON 输入,您必须添加额外的转义级别:String string = "\\u003c";
为了处理这些,您需要一个库来为您处理这些转义。您的 JSON 解析器应该能够做到这一点。【参考方案2】:
您可以尝试将字符串转换为字节数组
byte[] utfString = str.getBytes("UTF-8") ;
并通过指定 UTF-8 编码(如
)将其转换回字符串对象str = new String(utfString,"UTF-8") ;
【讨论】:
以上是关于在java中将UTF-16 unicode字符转换为UTF-8的主要内容,如果未能解决你的问题,请参考以下文章
在 Powershell 中将 UFT-8 xml 转换为 Unicode 时,$encoding 属性值在输出 xml 中显示 bigEndianUnicode,我想要 UTF-16