Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux教程 >> linux下將中文文件名文件cp到windows目錄下後文件名亂碼問題的解決

linux下將中文文件名文件cp到windows目錄下後文件名亂碼問題的解決

日期:2017/2/7 16:54:58      編輯:Linux教程

linux中,我的LC_ALL環境是zh_CN.gbk。

當我把中文文件名文件cp到windows的fat32盤下後,重起進入windows後發現文件名全是亂碼。

 

首先google,baidu了下,發現都推薦用convmv,這個工具是用perl編寫的,確實非常好用的工具,不過在我這裡它不適合。

 

----------------------------------我是華麗的分割線---------------------------------

 

還是拿具體例子來說話,比如說文件,政治.txt,先說下造成亂碼的根本原因,在windows下用winhex查看後,發現,

那些文件名確實是gbk編碼,只不過,編碼給分開了。

 

政治,gbk編碼 D5FE D6CE ,可是在硬盤上存儲的時候卻變成了,D500 FE00 D600 CE00。就算沒有多出這些00,我自己手動

改成 D5FE D6CE也不可以,因為windows下用的是unicode編碼。

 

----------------------------------我是華麗的分割線---------------------------------

嘗試下在linux中用convmv把gbk轉成unicode看看,不過之前,先用hexedit看下。

 

無法轉換成unicode,ucs-2le或者utf-16le,因為linux不支持,這個編碼的文件名...

結果發現,hexedit不能看文件名,它只是看內容的。

 

----------------------------------我是華麗的分割線---------------------------------

從linux再在ntfs下面寫個文件名看看,是不是也是亂碼。

 

這個發現不是亂碼,並且用這個方法成功解決問題。

 

解決方法:把亂碼的文件和文件夾,在linux下,從fat32盤,cp到/root,然後再mv到ntfs盤,就ok了~。

----------------------------------我是華麗的分割線---------------------------------

問題總結:

 

                    自己費了好多時間,10幾個小時,研究怎麼在fat32上面恢復中文,除了手工自己修改外,

在linux下面用convmv怎麼都不行。因為linux內置支持utf-8,可是不支持utf-16。

所以在最後執行rename 操作時,識別不了utf-16的文件名而報錯。

 

不過,倒是因為這個問題,我對編碼的各種方式和區別,還有轉化方法,有了更好的認識~

 

----------------------------------我是華麗的分割線---------------------------------

原因分析:

                        在掛載 我的fat32盤時,mount設置了編碼方式為gbk. ntfs沒有發現用什麼設置,

                        難道這個是原因?再進入linux自己研究下。

Copyright © Windows教程網 All Rights Reserved