簡體   English   中英

內部 C++ 中的字符編碼?

[英]Character Encoding in C++ internally?

如果我創建一個帶有u8前綴的字符串文字,機器代碼是否知道並說該變量的相應值應該編碼為 UTF-8?

這樣無論我在哪里運行程序,計算機每次都知道如何編碼? 還是機器代碼沒有說,像這樣和這樣編碼?

因為如果我用普通 char 編碼一些東西,用 UTF-8 編碼一些東西(例如使用 u8),那么有什么區別,如果機器代碼沒有說明,計算機如何知道編碼?

u8"..."字符串始終以 UTF-8 編碼,如[lex.string]/1中所指定。

"..."字符串的編碼取決於編譯器(以及源文件編碼),但配置 IDE 以將文件保存在 UTF-8 中並不難,並且編譯器不接觸 UTF-8 的純字符串文字.

無論如何,編碼完全在編譯時處理。 在編譯后的代碼中,字符串只是字節序列; 在運行時編碼之間沒有轉換,除非您明確調用一些 function 來執行此操作。

如果我創建一個帶有 u8 前綴的字符串文字,機器代碼是否知道並說該變量的相應值應該編碼為 UTF-8?

機器代碼什么都不知道。 編譯器將文字編碼為 UTF-8 並生成正確的字節序列。

這樣無論我在哪里運行程序,計算機每次都知道如何編碼? 還是機器代碼沒有說,像這樣和這樣編碼?

然后在運行時發出字節序列,接收該序列的 output 設備將正確翻譯它(如果它知道如何翻譯)。 這意味着,例如,接受 UTF-8 編碼的控制台將顯示正確的字符,如果不顯示垃圾的話。

是的,該字符幾乎肯定會以 UTF-8 編碼,但請注意標准不要求char8_t為 8 位,只是它需要能夠存儲 UTF-8 代碼單元,因此一些奇怪的 C++ 運行時可以使用 16 位字符每個元素只存儲 8 位。

另請注意, char8_t只能存儲 ASCII 字符,所有其他字符都需要多個代碼單元,因此即使它們只是單個字符,也需要存儲在char8_t字符串/數組中。

暫無
暫無

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

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