歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux與Windows 解壓亂碼 UTF8BOM讀取問題

Linux 與 Windows 文件亂碼問題   這幾天需要在linux下用CNN跑數據,但是把數據和數據列表list上傳到linux下時卻出現了不少亂碼的問題。將這兩天碰到的編碼問題簡單的總結一下。   1.解壓亂碼問題   如果直接把windows下壓縮的壓縮包通過ftp,這裡我用的是xftp傳輸到linux服務器的目錄下,我這裡用的是zip包壓縮,在Linux環境中用unzip直接解壓,會發現亂碼,這裡就是我們通常會碰到的解壓亂碼問題。主要原因是我們在壓縮的時候裡面的文件以及文件夾的名字都是根據當前環境大部分都是windows 中文 默認采用的GBK編碼。因此如果在linux下直接解壓,Linux下一般系統默認都是utf8編碼,因此解壓的時候也是會根據utf8的編碼方式來decode,所以會出現亂碼。   解決的方法是 加上CP936選項   unzip -O CP936 xxx.zip 這裡的CP936,有些人可能不明白,其實最早的GBK編碼,就是IBM定制的MBCS字符集,漢子編碼正好在整個字符集中的936頁,因此好多地方其實都是用CP936來代表GBK   2.文件讀取BOM問題亂碼   後來碰到的問題比較坑爹,就是我的txt文件是一個圖片列表,列表中有中文路徑,並且涉及到眾多的文件夾,不可能把他修改成英文,因此在linux下GBK編碼的txt文件放到Linux上是會出現亂碼的。這裡我們以盡量統一utf8格式的為好,為了處理方便。因此我在windows下用記事本,將ANSI編碼的txt文件另存為utf-8格式。   但是!!!我還是碰到了最暈的問題   這裡引入BOM的概念,一個文件在編碼後打上特定的標記,當打開文件時讀取這個標記來以相應的編碼方式解碼文件,這樣就可以解決不少問題。但是很多編輯器並不統一,給我們帶來了不少麻煩。這裡常見的如UTF8,UTF16,會打上這樣的mark標記   BOM_UTF8 '\xef\xbb\xbf'  BOM_UTF16_LE '\xff\xfe'  BOM_UTF16_BE '\xfe\xff'   這裡我當時是需要把txt文件傳到linux下默認是UTF8格式,因此直接用的windows記事本,後來讀取的時候就報錯了。可以看到在之後的unicode碼流中最先出現的是\xef\xbb\xbf,可能是linux默認沒有讀取BOM頭的問題,因此如果有文件需要傳輸的話,最好不要帶BOM頭到Linux中。這裡用Notepad++,選擇用UTF8-無BOM格式編碼就OK。   再在linux中讀取中文就不會亂碼了。
Copyright © Linux教程網 All Rights Reserved