我正在尝试使用 Mintty 从我的 Windows 计算机上 ssh 到 FreeBSD-11.2-Release,但是当我将 LC_ALL 设置为 en_US.UTF-8 并尝试输入/粘贴非 ASCII 字符时,连接被关闭。
我正在使用 Cygwin,并且还尝试过 Qterminal 和 Terminator。
FreeBSD 在 11.2-Release 版本中是否存在 UTF-8 字符问题?或者这只是 Windows 特有的(我的意思是 macOS 或 Linux 用户对此没有问题)?
注意:我的 FreeBSD 机器上没有安装任何 Windows 系统。
答案1
您声明了设置LC_ALL
,但我不确定您是否正确操作。一切实际上都涵盖在FreeBSD 手册: 22.2.使用本地化
我强烈建议您使用“登录类方法”(login.conf),而不是“Shell 启动文件方法”(.profile),因为它在系统和 shell 中更加一致。
当人们说他们修改了与语言相关的设置时,他们经常忘记两件事:
- 当更改
/etc/login.conf
(系统范围)或~/.login.conf
(用户)时,您需要运行cap_mkdb有什么效果! - 测试时请记住开始一个新会话!
第一件事是通过运行命令区域设置来验证您的设置。在普通的 FreeBSD 系统上,它将向您显示以下内容:
$ locale
LANG=
LC_CTYPE="C"
LC_COLLATE="C"
LC_TIME="C"
LC_NUMERIC="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_ALL=
通过这些设置,您将在最常见的终端上遇到 Unicode 问题。我正在使用 PuTTY,但无法将以下测试粘贴到终端中:
ÆØÅ жз ઑ ᱵ
这是因为 FreeBSD 默认设置不使用 unicode。此答案针对 11.2 进行了测试,但从 13 开始,默认值将是“C.UTF8”,无需更改。但是,在普通安装中,您可以通过将用户设置为使用“俄语”来进行非常快速的检查。原因是俄语是唯一一种现成定义的语言(在 中/etc/login.conf
)并且它使用 unicode。
pw usermod johndoe -L russian
现在登录到新的使用“johndoe”帐户(无论您的用户名为什么)的会话。您现在可以将 unicode(来自上面的测试)粘贴到 shell 中。验证如何使用以下命令获取设置locale
$ locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_ALL=
由于我现在已经验证了基本的 unicode 确实有效 - 然后我可以开始根据自己的喜好进行设置。由于我是丹麦人,我将执行以下简单步骤:
1.添加语言设置
对于我需要的每种语言,我将添加一个部分/etc/login.conf
danish|Danish Users Accounts:\
:charset=UTF-8:\
:lang=da_DK.UTF-8:\
:tc=default:
2.更新数据库
每当您编辑源login.conf时,您都需要更新数据库。
cap_mkdb /etc/login.conf
3. 设置用户语言
我通常用来pw
管理我的用户。现在我只需要在创建或修改用户时指定语言。
pw useradd janedoe -L danish
提示:我个人的偏好是不更改系统范围的“默认值”,而是将其保留为默认值。然后我设置系统帐户的语言,例如“postgres”。如果您的系统帐户需要非常具体的设置,但您的语言设置未涵盖,那么我会在/etc/login.conf
.这让事情变得美好而整洁。
提示2:以上显示了如何根据用户设置类别。如果你想要一个系统范围的改变你能更改 login.conf 中的“默认”类。
腻子提示:您的终端自然也需要支持 UTF-8。在 PuTTY 中,它位于设置中:窗口⮕翻译。我的设置为“UTF-8”。如果您位于 CJK 区域,您可能需要选中“将 CJK 模糊字符视为宽字符”。西里尔字母用户通常喜欢“Caps Lock 作为西里尔字母开关”。