我遇到了这行遗留代码,我试图找出这些遗留代码:
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