Java字符串编码(UTF-8)

Oce*_*lue 18 java string encoding

我遇到过这一系列遗留代码,我想弄清楚:

String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

据我所知,它是使用相同的charSet进行编码和解码.

这与以下有什么不同?

String newString = oldString;
Run Code Online (Sandbox Code Playgroud)

是否存在两条线路具有不同输出的情况?

ps:只是为了澄清,是的,我知道Joel Spolsky关于编码优秀文章!

Pet*_*rey 22

这可能是复杂的做法

String newString = new String(oldString);
Run Code Online (Sandbox Code Playgroud)

这缩短了String使用的底层char []要长得多.

但更具体地说,它将检查每个字符是否可以是UTF-8编码.

在String中可以有一些"字符",这些字符不能被编码,这些将被转换为 ?

\ uD800和\ uDFFF之间的任何字符都无法编码​​,将变为"?"

String oldString = "\uD800";
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8");
System.out.println(newString.equals(oldString));
Run Code Online (Sandbox Code Playgroud)

版画

false
Run Code Online (Sandbox Code Playgroud)

  • `oldString` 无法正确编码的唯一原因是它不是一个有效的 UTF-16(Java 中字符串的本机表示)字符串。UTF-8 完全能够对任何和所有 Unicode 代码点本身进行编码。在这种情况下,仅当“oldString”包含无效的 UTF-16 字节序列时才会出现差异。 (2认同)