以 UTF-8 SSH 到 FreeBSD
我正在嘗試使用 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 機器上安裝任何視窗系統。
您要求設置
LC_ALL
,但我不確定您是否正確執行。FreeBSD 手冊: 22.2實際上涵蓋了所有內容。使用本地化我強烈建議您使用“登錄類方法”(login.conf)而不是“Shell 啟動文件方法”(.profile),因為它在系統和 shell 之間更加一致。
當人們說他們修改了與語言相關的設置時,他們經常忘記兩件事:
- 更改
/etc/login.conf
(系統範圍)或~/.login.conf
(使用者)時,您需要執行cap_mkdb才能產生任何效果!- 並且在測試時記得開始一個新的會話!
首先是通過執行命令 locale 來驗證您的設置。在一個普通的 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 中的“預設”類。
**PuTTY 提示:**您的終端自然也需要支持 UTF-8。在 PuTTY 中,這是在設置中:Window ⮕ Translation。我的設置為“UTF-8”。如果您在 CJK 區域,您可能需要選中“Treat CJK ambiguous characters as wide”。西里爾文使用者通常喜歡“Caps Lock 充當西里爾文開關”。