本篇文章更新時間:2019/02/16
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
其實也忘記我 Mac 在換 Oh-My-Zsh 前 Bash 是不是也有這問題XD
但! 碰到問題就來解才是有趣的地方
剛好這幾天都有直接連上主機修改檔案的需求,偏偏原本看起來正常的中文 UTF8 編碼卻很有事的亂了調,怎麼查也都是 UTF8 連線,沒什麼大問題,深入去了解 SSH 與 locale 設定的關係才知道不得了,太貼心。
SSH 有個參數( AcceptEnv
)預設可以接收來自 client 連線時帶入的語系編碼參數搭配顯示
AcceptEnv LANG LC_*
而在 client 端也有個預設的參數( SendEnv
),預設會傳送本地語系編碼
SendEnv LANG LC_*
兩邊一搭一唱就把這整個亂碼事件給串起來,Mac 預設的參數 LC_CTYPE="zh_TW.UTF-8"
在遠端機器上沒有,而收到這參數的主機就會造成顯示錯誤。
解決辦法
- 改本機的 locale 設定,在 ~/.bash_profile 或是 ~/.zshrc 裡
export LC_CTYPE="en_US.UTF-8"
,讓傳送時以預設語系編碼方式帶入,需重啟終端。(推薦作法,傳送預設設定即可) - 改本機 ssh_config 檔中的 SendEnv ,將此段註解後重啟服務。(以後都不傳送了的意思)
- 改遠端 sshd_config 檔中的 AcceptEnv ,將此段註解後重啟服務。(以後都不接收了的意思)
以改變與設定彈性來看,第一個解決辦法是比較沒可能出事拉,至於其他方式手段都稍微硬了點,使用前請自行斟酌XD