Java UTF-16到UTF-8的转换

Java UTF-16到UTF-8的转换,java,twitter,encoding,utf-8,character-encoding,Java,Twitter,Encoding,Utf 8,Character Encoding,步骤1:使用HttpClient对Twitter端点进行REST调用,并获取包含表情符号的推文消息。Twitter API返回UTF-8编码的字符串。 示例:Message=您得到了一个长度为2的字符串-因为length()属性返回的是UTF-16代码单元数,而不是Unicode字符数。请记住,Java中的字符串实际上是UTF-16代码单元的序列,而不是字符序列 正如您所说,该表情符号用代理项对表示-它是U+1F604,在UTF-16中表示为U+D83D U+DE04 如果调用而不是length

步骤1:使用HttpClient对Twitter端点进行REST调用,并获取包含表情符号的推文消息。Twitter API返回UTF-8编码的字符串。

示例:Message=您得到了一个长度为2的字符串-因为
length()
属性返回的是UTF-16代码单元数,而不是Unicode字符数。请记住,Java中的
字符串实际上是UTF-16代码单元的序列,而不是字符序列

正如您所说,该表情符号用代理项对表示-它是U+1F604,在UTF-16中表示为U+D83D U+DE04

如果调用而不是
length()
,将得到1:

public class Test {
    public static void main(String[] args) {
        String emoji = "\ud83d\ude04";
        System.out.println(emoji.length()); // 2
        System.out.println(emoji.codePointCount(0, emoji.length())); // 1
    }
}

请注意,您通过解码UTF-8创建字符串的事实与其内容完全无关。假设您有一个与上面示例代码中的字符串相同的字符串,则解码工作正常。

作为代理对有什么不合理的?