如何在Bash中同时实现LANG=C的英文诊断与UTF-8字符支持?
解决UTF-8字符支持与英文诊断信息共存的问题
问题描述
为修复bash对多字节字符长度计算错误的问题,在.bashrc中设置LANG=C.UTF-8后,系统诊断信息变为德语(如ls x返回德语提示);但设置LANG=C会丢失UTF-8支持,回到原字符长度问题。尝试en_GB.UTF-8、en_US.UTF-8等英文locale,诊断信息仍为德语。
测试验证(编辑1)
以下设置均未达到预期:
LANG=C ls fö:英文诊断,但UTF-8文件名显示异常> LANG=C ls fö ls: cannot access 'f'$'\303\266': No such file or directoryLANG=C.UTF-8 ls fö:UTF-8文件名显示正常,但诊断信息为德语> LANG=C.UTF-8 ls fö ls: Zugriff auf 'fö' nicht möglich: Datei oder Verzeichnis nicht gefundenLANG=en_GB.UTF-8 ls fö/LANG=en_US.UTF-8 ls fö:UTF-8支持正常,但诊断信息仍为德语
已安装Locale(编辑2)
执行locale -a输出如下:
> locale -a C C.utf8 POSIX de_AT.utf8 de_BE.utf8 de_CH.utf8 de_DE.utf8 de_IT.utf8 de_LI.utf8 de_LU.utf8 en_AG en_AG.utf8 en_AU.utf8 en_BW.utf8 en_CA.utf8 en_DK.utf8 en_GB.utf8 en_HK.utf8 en_IE.utf8 en_IL en_IL.utf8 en_IN en_IN.utf8 en_NG en_NG.utf8 en_NZ.utf8 en_PH.utf8 en_SG.utf8 en_US.utf8 en_ZA.utf8 en_ZM en_ZM.utf8 en_ZW.utf8
解决方案
通过拆分locale变量,分别控制字符编码和消息语言:
在.bashrc中添加以下配置:
export LANG=C.UTF-8 export LC_MESSAGES=C
或更精细化的配置(仅指定必要项):
export LC_CTYPE=C.UTF-8 export LC_MESSAGES=C export LANG=C
效果验证
配置生效后,执行ls fö会同时满足:
- UTF-8文件名正常显示
- 诊断信息为英文:
> ls fö ls: cannot access 'fö': No such file or directory
内容的提问来源于stack exchange,提问作者emacs drives me nuts
相关产品推荐
相关产品推荐

