簡體   English   中英

Java字符串編碼(UTF-8)

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM