Character-Encoding
如果 C 語言環境是 UTF-8 而不是 ASCII,會出現什麼問題?
C 語言環境被定義為使用 ASCII 字元集,而 POSIX 不提供在不更改語言環境的情況下使用字元集的方法。
如果將 C 的編碼改為 UTF-8 會發生什麼?
積極的一面是 UTF-8 將成為任何程序的預設字元集,甚至是系統守護程序。顯然會有一些應用程序會中斷,因為它們假設 C 使用 7 位 ASCII。但是這些應用真的存在嗎?現在很多書面程式碼在一定程度上是區域設置和字元集感知的,我會驚訝地看到只能處理 7 位乾淨輸入並且不能輕易適應接受啟用 UTF-8 的 C 的程式碼.
C 語言環境不是預設語言環境。這是一個保證不會導致任何“令人驚訝”行為的語言環境。許多命令在or語言環境中具有保證形式的輸出(例如,
ps
或df
標頭、date
格式) 。對於編碼 ( ),保證只包含 ASCII 字母,依此類推。如果修改了語言環境,這將導致許多應用程序行為不端。例如,他們可能會拒絕無效的 UTF-8 輸入,而不是將其視為二進制數據。C``POSIX``LC_CTYPE``[:alpha:]``C
如果您希望系統上的所有程序都使用 UTF-8,請將預設語言環境設置為 UTF-8。也就是說,所有操作單一編碼的程序。有些程序只處理字節流而不關心編碼。一些程序操縱多種編碼並且不關心語言環境(例如,Web 伺服器或 Web 客戶端設置或讀取標頭中每個連接的編碼)。