在Java中,String
類通常使用UTF-16編碼。UTF-16是一種變長編碼,它使用兩個或四個字節來表示字符。對于大多數常用字符,UTF-16只需要一個或兩個字節,但對于某些輔助平面上的字符(如某些表情符號),則需要四個字節。
然而,需要注意的是,Java中的String
類實際上并不直接負責字符的編碼和解碼。相反,它使用char
類型來表示單個字符,這些字符在內部以UTF-16序列的形式存儲。當你需要將字符串轉換為字節流(例如,寫入文件或網絡傳輸)時,Java會自動將字符串轉換為UTF-16編碼的字節序列。同樣地,當你從字節流中讀取字符串時,Java會自動將UTF-16編碼的字節序列轉換回字符串。
如果你需要執行自定義的編碼和解碼操作,你可以使用Java的Charset
類。例如,你可以使用StandardCharsets.UTF_16BE
來表示UTF-16 Big-Endian編碼,或使用StandardCharsets.UTF_16LE
來表示UTF-16 Little-Endian編碼。以下是一個簡單的示例,演示了如何使用Charset
類將字符串轉換為UTF-16編碼的字節序列,以及將字節序列轉換回字符串:
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
public class StringEncodingExample {
public static void main(String[] args) {
String originalString = "Hello, World!";
// 將字符串轉換為UTF-16編碼的字節序列
byte[] utf16Bytes = originalString.getBytes(StandardCharsets.UTF_16BE);
System.out.println("UTF-16 Big-Endian bytes: " + new String(utf16Bytes, StandardCharsets.UTF_16BE));
// 將UTF-16編碼的字節序列轉換回字符串
String decodedString = new String(utf16Bytes, StandardCharsets.UTF_16BE);
System.out.println("Decoded string: " + decodedString);
}
}
在這個示例中,我們首先將原始字符串轉換為UTF-16 Big-Endian編碼的字節序列,然后再將其轉換回字符串。輸出結果應該與原始字符串相同。