String.getBytes(“utf-8”)在java中是如何工作的?

String.getBytes(“utf-8”)在java中是如何工作的?,java,unicode,encoding,utf-8,utf-16,Java,Unicode,Encoding,Utf 8,Utf 16,操作系统默认编码:UTF-8 在python中将UTF-8 str转换为UTF-16: utf8_str = "Hélô" # type(utf8_str) is str and encoded in UTF-8 unicode_str = utf8_str.decode("UTF-8") # type(unicode_str) is unicode utf16_str = unicode_str.encode("UTF-16") #type(utf16_str) is str and enco

操作系统默认编码:UTF-8

在python中将UTF-8 str转换为UTF-16:

utf8_str = "Hélô" # type(utf8_str) is str and encoded in UTF-8
unicode_str = utf8_str.decode("UTF-8") # type(unicode_str) is unicode
utf16_str = unicode_str.encode("UTF-16") #type(utf16_str) is str and encoded in UTF-16
正如您所看到的,unicode是将utf-8 str转换为utf-16 str的桥梁,它很容易理解

但是,在java中,我对转换感到困惑:

String utf16Str = "Hélô";// String encoded in "UTF-16"
byte[] bytes = utf16Str.getBytes("UTF-8");//byte array encoded in UTF-8, getBytes will call a encode method.
String newUtf16Str = new String(bytes, "UTF-8");// String encoded in "UTF-16"

没有解码,没有unicode。那么,在这个过程中发生了什么呢?

Java是开源的,所以如果你想,你可以看看代码,看看它到底做了什么。它已经在你的文件系统上了!我知道,但是如果有专家的建议,那么理解源代码就容易多了。字符串由JVM内部存储在UTF-16中的事实(顺便说一句,这不一定是事实)有些无关紧要。从语言的角度来看,字符串是一个字符串,没有编码-您可以使用所使用的两种方法(标准编码/解码操作)在字符串和字节[]之间进行转换。你真正的问题是什么?@assylias,哦,你的回答很有帮助。我认为java中的字符串是用UTF-16编码的。如果没有编码,那么使用getBytes进行转换是有意义的。还有一个问题,如果字符串没有编码,它是否用unicode表示,我们称之为代码点,UTF-16和字符串之间的关系是什么?毕竟,python中的str有一个编码(UTF-8、ascii等)。是的,字符串是一个unicode代码点序列,可以用UTF-16或UTF-8等多种编码方式进行编码。这可能是一篇有用的帖子:Java是开源的,所以如果你想看代码,你可以看看它的实际功能。它已经在你的文件系统上了!我知道,但是如果有专家的建议,那么理解源代码就容易多了。字符串由JVM内部存储在UTF-16中的事实(顺便说一句,这不一定是事实)有些无关紧要。从语言的角度来看,字符串是一个字符串,没有编码-您可以使用所使用的两种方法(标准编码/解码操作)在字符串和字节[]之间进行转换。你真正的问题是什么?@assylias,哦,你的回答很有帮助。我认为java中的字符串是用UTF-16编码的。如果没有编码,那么使用getBytes进行转换是有意义的。还有一个问题,如果字符串没有编码,它是否用unicode表示,我们称之为代码点,UTF-16和字符串之间的关系是什么?毕竟,python中的str有一个编码(UTF-8、ascii等)。是的,字符串是一个unicode代码点序列,可以用多种编码方式编码,如UTF-16或UTF-8等。这可能是一篇有用的帖子: