![](/img/trans.png)
[英]When I assign char (from literal or otherwise), what “java internal encoding is UTF16” means here? In what encoding is it stored in char?
[英]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.