我已经尝试了几种方法来从c++程序中设置终端“编码”。我所能做的就是更改语言环境。或者LANG变量。
我仍然可以输入与LANG编码不同的字符(以及nl_langinfo的输出)
但是,如果我去终端>设置字符编码> ISO-8859-15 (或其他),那么它只允许ISO-8859-15。我也可以从我的C++程序中实现相同的事情(从图形用户界面设置)吗?
我使用setlocale(LC_CTYPE,"")将编码设置为终端编码,但它只使用了LANG variable.And也允许其他字符。
(终端>设置字符编码> 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 !!因此,这就引出了我对语言环境和编码的理解是否正确的问题。
有没有人能澄清一下其中的区别?
发布于 2013-05-14 22:33:40
编码只是区域设置的一部分,对于终端来说,它会影响终端显示和处理输入的方式。
使用终端运行的程序的终端编码和区域设置几乎是独立的,可能不匹配或可能配置错误。
setlocale()将设置或查询程序的当前区域设置。
终端通常会产生一个新的shell,设置LANG或LC_*环境变量只会影响使用该shell运行的程序。
此外,设置区域设置或编码不会阻止输入“其他”字符。
这个answer应该有助于澄清一些事情。
https://stackoverflow.com/questions/16544456
复制相似问题