1. 程式人生 > >從Windows複製檔案到Linux顯示亂碼問題

從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  公共  模板  視訊  圖片  文件  下載  音樂  桌面