歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 解決SecureCRT中文顯示亂碼

解決SecureCRT中文顯示亂碼

日期:2017/2/28 14:38:43   编辑:Linux教程

SecureCRT是一個非常優秀的終端登錄工具,可以以telnet ,ssh,串口多種方式從終端登錄服務器,並且可以非常方便的進行復制和粘貼。但近日用CRT登陸RHEL中文操作系統,凡是中文字符都顯示為亂碼。郁悶許久,終於解決。

操作步驟

以下兩步:

遠程linux機器。修改環境變量LANG。例如在~/.bash_profile裡面添加

export LANG=zh_CN.UTF8

重新登錄之後生效。

現在查看一下當前設置:

myname@myhost~> locale
LANG=zh_CN.UTF8
LC_CTYPE="zh_CN.UTF8"
LC_NUMERIC="zh_CN.UTF8"
LC_TIME="zh_CN.UTF8"
LC_COLLATE="zh_CN.UTF8"
LC_MONETARY="zh_CN.UTF8"
LC_MESSAGES="zh_CN.UTF8"
LC_PAPER="zh_CN.UTF8"
LC_NAME="zh_CN.UTF8"
LC_ADDRESS="zh_CN.UTF8"
LC_TELEPHONE="zh_CN.UTF8"
LC_MEASUREMENT="zh_CN.UTF8"
LC_IDENTIFICATION="zh_CN.UTF8"
LC_ALL=
myname@myhost~>

本地windows機器。修改SecureCRT的設置。找到“選項”->“會話選項”->“外觀”:

* 字符編碼設置為utf-8。

* 字體設置,選擇中文字體,例如新宋體。

設置完成。然後測試一下。

基本原理

首先,同一種語言,可以使用不同的編碼。例如,中文windows的系統默認字符集是cp936,基本上等同gbk。參考 http://zh.wikipedia.org/wiki/GBK 。

例如有兩個文件。文件名分別為“我的分析1.txt”和“我的分析2.txt”。但是文件名(不是文件內容)的編碼格式不同。

“我的分析1.txt”的UTF-8編碼為

e68891 e79a84 e58886 e69e90 31 2e 74 78 74
我 的 分 析 1 . t x t

"我的分析2.txt"的gb2312(是gbk的一個真子集)編碼格式為

ced2 b5c4 b7d6 cef6 32 2e 74 78 74
我 的 分 析 2 . t x t

第二,linux shell環境下,環境變量LANG決定了本地使用的字符集(通常情況,不考慮LC_ALL等)。包括文件名和文件內容的處理。例如,由於編碼不同,運行ls命令時,上面的兩個文件名不能同時正確顯示。

在實際linux系統中,不應該如此靈活,而要固定一種文件名編碼格式。例如,linux一般默認使用utf-8編碼文件名。以下三種情況:

1> LANG=zh_CN.UTF8,設置shell程序使用UTF8編碼處理字符。因此,

“我的分析1.txt”能夠被正確處理,因為是UTF-8編碼。

“我的分析2.txt”是gb2312編碼,顯示為亂碼。

2> LANG=zh_CN.gb2312 或者 LANG=zh_CN.gb18030,那麼

“我的分析1.txt”顯示為亂碼。

“我的分析2.txt”能夠正確處理。

3> LANG=en,那麼ls查看,兩個文件名都不能正常顯示。

第三,SecureCRT客戶端的編碼設置要與遠程linux的編碼設置一致,才可以正確顯示字符。

補充說明

SecureCRT和遠程linux同時都使用gb2312編碼,也沒有問題。在這種情況下,字符都按照gb2312進行處理。但是,筆者在自己的windows上利用網絡鄰居查看遠端的linux samba server時,看到的gb2312中文文件名是亂碼。而用UTF-8就沒有問題。盡管通過設置samba能夠解決,但還是建議統一用默認的UTF8格式,比較保險。

VIM正確顯示和輸入中文的設置。編輯~/.vimrc,添加下面兩行

let &termencoding=&encoding
set fileencodings=ucs-bom,utf-8,gbk

這樣設置之後,utf-8和gb2312都能正確處理。

Copyright © Linux教程網 All Rights Reserved