我遇到了这行遗留代码,我试图找出这些遗留代码:

String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));

据我了解,它是使用相同的charSet进行编码和解码。

这与以下内容有何不同?
String newString = oldString;

在任何情况下,这两行的输出都不同吗?

附注:为了澄清,是的,我知道excellent article on encoding by Joel Spolsky!

最佳答案

这可能是很复杂的方式

String newString = new String(oldString);

这缩短了String,而所使用的基础char []则更长。

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

字符串中可以包含一些无法编码的“字符”,这些字符将被转换为?
\uD800和\uDFFF之间的任何字符都无法编码​​,并且将变成'?'
String oldString = "\uD800";
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8");
System.out.println(newString.equals(oldString));

版画
false

10-03 01:15