[英]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.