2013-05-14 85 views
2

我已經嘗試了幾種方法來設置終端'編碼'從一個c + +程序。 我所能做的就是改變語言環境。或LANG變量。區域設置和編碼(終端)有什麼區別

不過我能進入哪些是不同的編碼比LANG(和了nl_langinfo的輸出(CODESET))

的字符,但是,如果我去到終端>設置字符編碼> ISO-8859-15(或者其他),那麼它只允許ISO-8859-15。 我可以從我的C++程序中完成同樣的事情(從GUI設置)嗎?

我用setlocale(LC_CTYPE,「」)將編碼設置爲終端編碼,但它只是使用LANG變量。並允許其他字符。

(後終端>設置字符編碼> ISO-8859-1(Latin1的))

>setenv LANG en_US.iso885915 --> latin9 
>./a.out 
Current Locale : C 
Lang info : ANSI_X3.4-1968 
Trying to change locale from C to "" 
Current Locale : en_US.iso885915 
Lang info : ISO-8859-15 
Enter some string :¤¦¨´¸¼½¾ dfsafas --> but these are Latin1 charaters !! 
Entered string : ¤¦¨´¸¼½¾ dfsafas --> They are even printed back !! 

所以,這給我帶來了下來的問題,如果我對語言環境和編碼的理解是否正確。

有人可以澄清區別?

回答

2

編碼只是區域設置的一部分,對於終端它會影響終端顯示和處理輸入的方式。

與終端運行的程序的終端編碼和區域設置非常獨立,可能不匹配或可能配置錯誤。

setlocale()將設置或查詢程序的當前語言環境。

終端通常會產生一個新的shell並且設置LANG或LC_ *環境變量只會影響使用此shell運行的程序。

還設置區域設置或編碼不會阻止輸入「其他」字符。

這個answer應該有助於澄清事情。

+0

感謝您的解釋,這清除了很多東西。參考也是有幫助的。 – k0n3ru 2013-05-15 03:49:34