簡體   English   中英

存儲在什么編碼中的 Java 字符?

[英]In what encoding is a Java char stored in?

Java char 類型是否保證以任何特定編碼存儲?

編輯:我錯誤地表達了這個問題。 我要問的是 char 文字是否保證使用任何特定的編碼?

“儲存”在哪里? Java 中的所有字符串都以 UTF-16 表示 當寫入文件、通過網絡發送或其他任何方式時,它會使用您指定的任何字符編碼發送。

編輯:特別是對於char類型,請參閱Character docs 具體來說:“char 數據類型……基於原始的 Unicode 規范,該規范將字符定義為固定寬度的 16 位實體。” 因此,如果char實際上包含來自該字符集的字符,則將char轉換為int將始終為您提供 UTF-16 值。 如果您只是將一些隨機值插入char ,它顯然不一定是有效的 UTF-16 字符,同樣如果您使用錯誤的編碼讀取字符。 文檔 go 討論了補充 UTF-16 字符如何只能由int表示,因為char沒有足夠的空間來容納它們,如果你在這個級別上操作,熟悉它可能很重要與那些語義。

Java char通常用於保存Unicode 代碼單元 即一個 16 位單元,它是有效 UTF-16 序列的一部分。 但是,沒有什么可以阻止應用程序將任何 16 位無符號值放入char中,而不管它的實際含義是什么。

因此,您可以說 Unicode 代碼單元可以用char表示,而char可以表示 Unicode 代碼單元......但在一般情況下,這些都不一定正確。

您關於如何存儲 Java char的問題無法回答。 簡單地說,這取決於“存儲”的含義:

  • 如果您的意思是“在執行程序中表示”,那么答案是 JVM 實現特定的。 char數據類型通常表示為 16 位機器 integer,盡管它可能是也可能不是機器字對齊,這取決於具體的上下文。)

  • 如果您的意思是“存儲在文件中”或類似的東西,那么答案完全取決於應用程序選擇如何存儲它。


Java char 類型是否保證以任何特定編碼存儲?

根據我上面所說的答案是“不”。 在執行的應用程序中,由應用程序決定char的含義/包含的內容。 當一個char被存儲到一個文件中時,應用程序決定它想如何存儲它以及它將使用什么磁盤上的表示。


跟進

char 文字呢? 例如,“c”必須具有某種由語言定義的值。

Java 源代碼(由語言規范要求)為 Unicode 文本,以工具鏈可以理解的某些字符編碼表示; 請參閱javac -encoding選項。 理論上,一個字符編碼可能會在你的源代碼中'c'中出現c的東西。

In practice though, the c will map to the Unicode lower-case C code-point (U+0063) and will be represented as the 16-bit unsigned value 0x0063.

就 char 文字具有 Java 語言所賦予的含義而言,它們表示(並表示為)UTF-16 代碼單元。 請注意,它們可能會或可能不會被分配 Unicode 代碼點(“字符”)。 U+0000 到 U+FFFF 范圍內的一些 Unicode 代碼點未分配。

原來Java內部使用UCS-2; 現在它使用 UTF-16。 兩者幾乎相同,除了 D800 - DFFF,它在 UTF-16 中用作更大字符的擴展表示的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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