Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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 如何将十六进制的UTF-8转换为其代码点?_Java_Utf 8 - Fatal编程技术网

Java 如何将十六进制的UTF-8转换为其代码点?

Java 如何将十六进制的UTF-8转换为其代码点?,java,utf-8,Java,Utf 8,我有一个字符串E28099,它是UTF-8字符的十六进制表示形式。字符串表示 U+2019 ’ e2 80 99 RIGHT SINGLE QUOTATION MARK 我想将e28099转换为相应的Unicode码点,即U+2019甚至”(单引号) 如何操作?基本上,您需要获取用utf-8编码的字符的字符串表示形式,然后获取结果字符串的第一个字符(如果结果字符在utf-16中表示为两个代理项,则为第一+第二)。这是一个概念证明: public static void main(S

我有一个字符串E28099,它是UTF-8字符的十六进制表示形式。字符串表示

U+2019  ’   e2 80 99    RIGHT SINGLE QUOTATION MARK
我想将
e28099
转换为相应的Unicode码点,即
U+2019
甚至
(单引号)


如何操作?

基本上,您需要获取用utf-8编码的字符的字符串表示形式,然后获取结果字符串的第一个字符(如果结果字符在utf-16中表示为两个代理项,则为第一+第二)。这是一个概念证明:

public static void main(String[] args) throws Exception {

    // Convert your representation of a char into a String object: 
    String utf8char = "e2 80 99";
    String[] strNumbers = utf8char.split(" ");
    byte[] rawChars = new byte[strNumbers.length];
    int index = 0;
    for(String strNumber: strNumbers) {
        rawChars[index++] = (byte)(int)Integer.valueOf(strNumber, 16);
    }
    String utf16Char = new String(rawChars, Charset.forName("UTF-8"));

    // get the resulting characters (Java Strings are "encoded" in UTF16)
    int codePoint = utf16Char.charAt(0);
    if(Character.isSurrogate(utf16Char.charAt(0))) {
        codePoint = Character.toCodePoint(utf16Char.charAt(0), utf16Char.charAt(1));
    }
    System.out.println("code point: " + Integer.toHexString(codePoint));
}