從Windows複製檔案到Linux顯示亂碼問題
(1).檔名亂碼
這並不是所有人都會碰到的問題,一般常見於使用putty的使用者,他們使用pscp和pftp傳遞檔案。大部分偽終端都會自帶一個專門用於傳遞檔案的埠或軟體,只要設定好就不會出現此問題。如果遇到了也不要害怕,使用convmv命令可以解決你所遇到的這個問題。
我寫詳細一點還原真實場景,首先我來上傳一個測試檔案“a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt”。在確保putty可以正常連線到Linux上,開啟Windows上的命令提示符輸入pscp命令(pscp [Windows上的檔案位置,可以絕對路徑,可以相對路徑] [以什麼使用者登入Linux]@[Linux的IP地址]:[傳到Linux上什麼位置,絕對路徑])。
C:\Users\xuefei>pscp c:\Users\xuefei\Desktop\a此檔案在windows下開啟正常-到linux 下vim開啟亂碼.txt [email protected]:/home/xf/ [email protected]'s password: a此檔案在windows下開啟正?| 0 kB | 0.1 kB/s | ETA: 00:00:00 | 100%
這就上傳好,下面我們來Linux下看看上傳後的檔案
[[email protected] ~]$ ls 1 secondDir 視訊 下載 a???ļ???windows?´???????-??linux??vim????????.txt 公共 圖片 音樂 mainDir 模板 文件 桌面
可以看到有一個a開頭的亂碼檔名,看一下自己有沒有convmv命令,沒有就yum安裝一下,記住這時需要使用root使用者
[[email protected] ~]# yum install convmv 已載入外掛:fastestmirror, langpacks Loading mirror speeds from cached hostfile * base: mirrors.cn99.com * extras: mirrors.aliyun.com * updates: mirrors.cn99.com CentOS7 | 3.6 kB 00:00
安裝完convmv命令,可以--help一下看看如何使用。這裡會使用到-f選項(原始檔編碼格式),-t(想要的格式),--notest選項(檔案重新命名)。如果是目錄還需要-r選項(遍歷目錄)
[[email protected] ~]# convmv -f gbk -t utf8 --notest /home/xf/a���ļ���windows�´�������-��linux��vim��������.txt mv "/home/xf/a���ļ���windows�´�������-��linux��vim��������.txt" "/home/xf/a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt" Ready! [[email protected] ~]# ls /home/xf/ 1 secondDir 視訊 下載 a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt 公共 圖片 音樂 mainDir 模板 文件 桌面
看,這就完成了。
注意:Windows編碼是gb2312,我的Linux編碼是UTF-8。想要看自己的編碼可以使用locale檢視。詳細瞭解可以看 https://www.cnblogs.com/diantong/p/10200145.html
[[email protected] ~]$ locale LANG=zh_CN.UTF-8 LC_CTYPE="zh_CN.UTF-8" LC_NUMERIC="zh_CN.UTF-8" LC_TIME="zh_CN.UTF-8" LC_COLLATE="zh_CN.UTF-8" LC_MONETARY="zh_CN.UTF-8" LC_MESSAGES="zh_CN.UTF-8" LC_PAPER="zh_CN.UTF-8" LC_NAME="zh_CN.UTF-8" LC_ADDRESS="zh_CN.UTF-8" LC_TELEPHONE="zh_CN.UTF-8" LC_MEASUREMENT="zh_CN.UTF-8" LC_IDENTIFICATION="zh_CN.UTF-8" LC_ALL=
(2).檔案內的亂碼
轉換完檔名的亂碼其實並沒有結束,因為檔案內容還是亂碼
[[email protected] ~]$ cat a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt #!/bin/bash echo 'ѧϰ' echo 'ѧϰ' echo 'ѧϰ' echo 'ѧϰ'
這時需要用到iconv命令,沒有yum安裝一下。這裡會用到-f選項(原始檔格式),-t選項(想要的格式),-o選項(輸出檔案)
[[email protected] ~]$ iconv -f gbk -t utf8 a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt -o a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt //我這裡將編譯後的檔案輸出到原始檔 [[email protected] ~]$ cat a此檔案在windows下開啟正常-到linux下vim開啟亂碼.txt #!/bin/bash echo '學習' echo '學習' echo '學習' echo '學習'
(3).擴充套件
如果你對檔名沒有要求,或檔名輸入並不複雜,可以將直接使用iconv命令重新給一個新的檔名
[[email protected] ~]$ ls 1 secondDir 視訊 下載 a???ļ???windows?´???????-??linux??vim????????.txt 公共 圖片 音樂 mainDir 模板 文件 桌面 [[email protected] ~]$ iconv -f gbk -t utf8 a���ļ���windows�´�������-��linux��vim��������.txt -o a.txt [[email protected] ~]$ ls 1 mainDir 模板 文件 桌面 a???ļ???windows?´???????-??linux??vim????????.txt secondDir 視訊 下載 a.txt 公共 圖片 音樂 [[email protected] ~]$ cat a.txt #!/bin/bash echo '學習' echo '學習' echo '學習' [[email protected] ~]$ rm a???ļ???windows?´???????-??linux??vim????????.txt [[email protected] ~]$ ls 1 a.txt mainDir secondDir 公共 模板 視訊 圖片 文件 下載 音樂 桌面