Character-Encoding

如果 C 語言環境是 UTF-8 而不是 ASCII,會出現什麼問題?

  • August 13, 2018

C 語言環境被定義為使用 ASCII 字元集,而 POSIX 不提供在不更改語言環境的情況下使用字元集的方法。

如果將 C 的編碼改為 UTF-8 會發生什麼?

積極的一面是 UTF-8 將成為任何程序的預設字元集,甚至是系統守護程序。顯然會有一些應用程序會中斷,因為它們假設 C 使用 7 位 ASCII。但是這些應用真的存在嗎?現在很多書面程式碼在一定程度上是區域設置和字元集感知的,我會驚訝地看到只能處理 7 位乾淨輸入並且不能輕易適應接受啟用 UTF-8 的 C 的程式碼.

C 語言環境不是預設語言環境。這是一個保證不會導致任何“令人驚訝”行為的語言環境。許多命令在or語言環境中具有保證形式的輸出(例如,psdf標頭、date格式) 。對於編碼 ( ),保證只包含 ASCII 字母,依此類推。如果修改了語言環境,這將導致許多應用程序行為不端。例如,他們可能會拒絕無效的 UTF-8 輸入,而不是將其視為二進制數據。C``POSIX``LC_CTYPE``[:alpha:]``C

如果您希望系統上的所有程序都使用 UTF-8,請將預設語言環境設置為 UTF-8。也就是說,所有操作單一編碼的程序。有些程序只處理字節流而不關心編碼。一些程序操縱多種編碼並且不關心語言環境(例如,Web 伺服器或 Web 客戶端設置或讀取標頭中每個連接的編碼)。

引用自:https://unix.stackexchange.com/questions/67680