[英]Java String encoding (UTF-8)
我遇到过这一系列遗留代码,我想弄清楚:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
据我所知,它是使用相同的charSet进行编码和解码。
这与以下有什么不同?
String newString = oldString;
是否存在两条线路具有不同输出的情况?
ps:只是为了澄清,是的,我知道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
这与以下有什么不同?
这行代码在这里:
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
构造一个新的String对象(即oldString
的副本),而这行代码:
String newString = oldString;
声明一个java.lang.String
类型的新变量并初始化它以引用与变量oldString
相同的String对象。
是否存在两条线路具有不同输出的情况?
绝对:
String newString = oldString;
boolean isSameInstance = newString == oldString; // isSameInstance == true
与
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
// isSameInstance == false (in most cases)
boolean isSameInstance = newString == oldString;
a_horse_with_no_name(见评论)当然是对的。 相当于
String newString = new String(oldString.getBytes("UTF-8"), "UTF-8"));
是
String newString = new String(oldString);
减去Peter Lawrey在他的回答中解释的编码的细微差别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.