【问题标题】:java: UTF-32 to UTF-16 convertorjava: UTF-32 到 UTF-16 的转换
【发布时间】:2014-07-16 21:27:03
【问题描述】:

我正在尝试获取 java 转义码。
示例:1F612 ==> \ud83d\ude12

我试过了:

String toConvert = "\ud83d\ude12";
String result = "";
for(int x=0;x<toConvert.length();x++){
    int codePoint = Character.codePointAt(toConvert, x);
    String hexStr = Integer.toHexString(codePoint);
    hexStr = formatUTF(hexStr);
    result += hexStr;
}
System.out.println(result);

格式化UTF函数:

public static String formatUTF(String hex){
    String text = hex;
    for(int x = 0; x<4-hex.length();x++)
        text = "0"+text;
    return "\\u"+text;
}

但是输出:

run:
\u1f612\ude12

注意:1F612Hex = 128530Integer

请帮忙。

【问题讨论】:

    标签: java utf-8 utf-32


    【解决方案1】:

    也许这说明了一切。

        for (int i = 0; i < toConvert.length(); ) {
            int codePoint = Character.codePointAt(toConvert, i);
            i += Character.charCount(codePoint);
            System.out.printf("[%d] cp: %x%n", i, codePoint);
        }
        for (int i = 0; i < toConvert.length(); ++i) {
            char ch = toConvert.charAt(i);
            System.out.printf("[%d] c: %x%n", i, (int)ch);
        }
    

    它产生两个 16 位字符的单个代码点。

        [2] cp: 1f612
        [0] c: d83d
        [1] c: de12
    

    正如UTF-16 standard 所说的那样。

    【讨论】:

    • 谢谢。这就是我要找的。所以,我使用了错误的功能。 :p
    猜你喜欢
    • 2016-07-23
    • 2020-01-28
    • 2021-01-30
    • 1970-01-01
    • 2010-12-02
    • 2017-09-24
    • 1970-01-01
    • 2015-09-21
    相关资源
    最近更新 更多