如何在Java中转换UTF-8和native String?

时间:2016-08-08 11:02:42

标签: java utf-8 converter native

enter image description here

就像图片一样,我想在Java中编码UTF-8 String和Native String之间进行转换。 有人会有什么建议吗?非常感谢!

PS。 例如,

String a = "这是一个例子,this is a example";
String b = null;
// block A: processing a, and let b = "这是一个例子,this is a example"

如何实施"块A"?

3 个答案:

答案 0 :(得分:1)

Apache Commons Lang StringEscapeUtils.unescapeXml(...)就是您想要的。根据原始字符串的来源,其中一个HTML变体可能更合适。

像这样使用:

String a = "这是一个例子,this is a example";
String b = StringEscapeUtils.unescapeXml(a);
// block A: processing a, and let b = "这是一个例子,this is a example"
System.out.println(a);
System.out.println(b);

输出:

这是一个例子,this is a example
这是一个例子,this is a example

还有其他转换方法。

答案 1 :(得分:0)

您可以使用Charset。请参阅文档here

Charset.forName("UTF-8").encode(text)

或者

您也可以使用'java.lang.String'类

getBytes()方法
text.getBytes(Charset.forName("UTF-8"));

文件:

  

public byte [] getBytes(Charset charset)
  使用给定的字符集将此String编码为字节序列,   将结果存储到   新的字节数组。

     

此方法始终替换malformed-input和unmappable-character   具有此charset的默认替换字节数组的序列。该   当更多控制时,应该使用CharsetEncoder类   编码过程是必需的。

     

参数: charset - 用于对字符串进行编码的字符集

     

返回: 结果字节数组

     

<强> 自:
  1.6

答案 2 :(得分:0)

右边是十六进制数字HTML实体。

现在apache commons库有一个StringEscapeUtils可以将转换为String,但反过来并不明显(=应该尝试,可能会给命名实体)。

public static void main(String[] args) throws InterruptedException {
    String a = "&#x8FD9;&#x662F;&#x4E00;&#x4E2A;&#x4F8B;&#x5B50;,this is a example";
    String b = fromHtmlEntities(a);
    System.out.println(b);
    String a2 = toHtmlEntities(b);
    System.out.println(a2.equals(a));
    System.out.println(a);
    System.out.println(a2);
}

public static String fromHtmlEntities(String s) {
    Pattern numericEntityPattern = Pattern.compile("\\&#[Xx]([0-9A-Fa-f]{1,6});");
    Matcher m = numericEntityPattern.matcher(s);
    StringBuffer sb = new StringBuffer();
    while (m.find()) {
        int codePoint = Integer.parseInt(m.group(1), 16);
        String replacement = new String(new int[] { codePoint }, 0, 1);
        m.appendReplacement(sb, replacement);
    }
    m.appendTail(sb);
    return sb.toString();
}

// Uses java 8  
public static String toHtmlEntities(String s) {
    int[] codePoints = s.codePoints().flatMap(
            (cp) -> cp < 128 // ASCII?
            ? IntStream.of(cp)
            : String.format("&#x%X;", cp).codePoints())
        .toArray();
    return new String(codePoints, 0, codePoints.length);
}