这可能不是解决这个问题的合适网站,因为它更多的是投诉而不是问题,但这里是。
今天我将计算机从 Mint 15 更新到 Debian 7.6。完成此操作后,我的计算机认为所有现有文件名都编码为 ISO-8859-1 而不是 UTF-8。因此,例如,包含“à”的文件名现在显示为“à”等。
原来我需要告诉我的系统明确地export LANG=en_US.UTF-8
通过放入我的 .bashrc 文件,文件系统使用 UTF-8 。
问题是,为什么?为什么在 2014 年这个时代有必要做这样的事情呢?显然,Mint 的默认值是 UTF-8;为什么 Debian 应该有所不同?是什么导致 Debian 使用如此晦涩且过时的默认设置,即使我在安装时告诉它我想要的区域设置是什么,并且 /etc/locale.gen 仅包含en_US.UTF8 UTF8
作为唯一(未注释的)行。我是否需要记住为从现在开始创建的每个新用户帐户编辑 .bashrc 文件以编辑导出行?
答案1
这Debian 上的默认语言环境是UTF-8编码,至少从喘息开始(我不记得它是什么时候切换的)。因此您在安装过程中一定选择了一些非默认设置。
将导出
LANG=en_US.UTF-8
放入我的 .bashrc 文件中。
那是行不通的,因为.bashrc
是错误的文件。此处定义的环境变量仅适用于从终端启动的程序。
定义此环境变量的正确位置是/etc/environment
使其成为系统设置或~/.pam_environment
每用户设置。两个文件都是登录时阅读(通过所有登录方法)。
具体的语言环境变量对于字符编码是LC_CTYPE
.设置LANG
设置所有设置,LC_COLLATE
包括可能会产生令人惊讶的后果。你应该只设置LC_CTYPE
.
LANG
因此,从您的设置中删除.bashrc
并添加LC_CTYPE=en_US.utf8
它所属的位置,即在/etc/environment
或中~/.pam_environment
。
答案2
首先,我很惊讶您能够将 Mint 15 更新到 Debian 7.6。它们毕竟是不同的发行版。
我假设 Debian 决定使用 ISO 8859.1,因为您位于欧洲,并回答了一些有关区域设置的问题。
答案3
我是否需要记住为从现在开始创建的每个新用户帐户编辑 .bashrc 文件以编辑导出行?
在这种情况下,最好的想法是将其放入系统范围的文件中;首先检查它是否已经被设置在某处:
grep -R LANG /etc
您可能想也可能不想更改那里的任何内容。
吉尔斯的回答可能有最有效的地方来设置它,但我将在这里留下部分内容来解释他所说的“在登录时读取(通过所有登录方法)”的含义。
您可以创建一个ZZ-local.sh
文件并将其放入/etc/profile.d
.当用户登录时,那里的文件按字典顺序获取,因此ZZ
应该覆盖以前的任何内容。该文件不需要可执行或包含 shebang,因此一行export LANG=...
应该没问题。
一些 GUI 登录显示管理器不阅读——例如,lightdm(您可能已经注意到与此相关的热门内容.profile
之一;lightdm在 init 脚本中导出)。如果是这种情况,您将需要执行与刚刚描述的 WRT 相同的操作,但对于.事实上,以下几点并没有什么坏处:grep
$LANG
/etc/profile.d
/etc/X11/Xsession.d
ln -s /etc/profile.d/ZZ-local.sh /etc/X11/Xsession.d/ZZ-local
对两个文件进行符号链接。请记住,这可能意味着它将连续两次获得来源,尽管如果您所做的只是设置$LANG
,那也没关系。