Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符串转换为其Unicode代码点_Java_Unicode - Fatal编程技术网

Java 将字符串转换为其Unicode代码点

Java 将字符串转换为其Unicode代码点,java,unicode,Java,Unicode,假设我有一个字符串foo=“这是一个苹果” Unicode代码点等效项为 “\\x74\\x68\\x69\\x73………\\x61\\x70\\x70\\x6c\\x65” 如何从字符串foo转换 到 字符串“\\x74\\x68\\x69\\x73………\\x61\\x70\\x70\\x6c\\x65”试试这个 public static String generateUnicode(String input) { StringBuilder b =

假设我有一个字符串foo=“这是一个苹果”

Unicode代码点等效项为

\\x74\\x68\\x69\\x73………\\x61\\x70\\x70\\x6c\\x65

如何从字符串foo转换

字符串“
\\x74\\x68\\x69\\x73………\\x61\\x70\\x70\\x6c\\x65

试试这个

        public static String generateUnicode(String input) {
            StringBuilder b = new StringBuilder(input.length());
            for (char c : input.toCharArray()) {

                b.append(String.format("\\u%04x", (int) c));

            }
            return b.toString();
        }

下面是进行转换的工作代码段:

public class HexTest {

    public static void main(String[] args) {

        String testStr = "hello日本語 ";

        System.out.println(stringToUnicode3Representation(testStr));
    }

    private static String stringToUnicode3Representation(String str) {
        StringBuilder result = new StringBuilder();
        char[] charArr = str.toCharArray();
        for (int i = 0; i < charArr.length; i++) {
            result.append("\\u").append(Integer.toHexString(charArr[i] | 0x10000).substring(1));
        }
        return result.toString();
    }   
}

这里有一种方法可以通过每个单独的角色来实现。。。可能会将您引导到正确的方向:转换字符串的第一部分不应该是\\x54吗?这可能会有所帮助:没有所谓的
UTF-16
codepoint。Unicode代码点是字符的单个值
UTF-16
是至少使用2个字节对代码点进行编码。低平面中的代码点使用其精确值进行编码。(因此,这两种方法之间存在着普遍的混淆)。补充平面使用代理项对,这使事情变得更复杂。这在大多数情况下都有效。如果使用了代理项对(仅限非常罕见的字符),则它将不起作用,因为在BMP(基本多语言计划)中,utf-16定义的编码只是在2个字节上使用普通码点。
public class HexTest {

    public static void main(String[] args) {

        String testStr = "hello日本語 ";

        System.out.println(stringToUnicode3Representation(testStr));
    }

    private static String stringToUnicode3Representation(String str) {
        StringBuilder result = new StringBuilder();
        char[] charArr = str.toCharArray();
        for (int i = 0; i < charArr.length; i++) {
            result.append("\\u").append(Integer.toHexString(charArr[i] | 0x10000).substring(1));
        }
        return result.toString();
    }   
}
private static String str2UnicodeRepresentation(String str) {
    StringBuilder result = new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        int cp = Character.codePointAt(str, i);
        int charCount = Character.charCount(cp);
        //UTF characters may use more than 1 char to be represented
        if (charCount == 2) {
            i++;
        }
        result.append(String.format("\\u%x", cp));
    }
    return result.toString();
}