在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

在 vc++ 中将 Unicode 字节数组转换为 CString

unicode16与unicode32之间是啥转换关系

将 unicode 代码点转换为 utf-16

Java与Mysql的unicode编码

Java与Mysql的unicode编码