Linux文件亂碼
Introduction
原文地址: Linux文件亂碼 - FindSpace
本文主要介紹linux下zip解壓出來亂碼以及普通文本類文件的亂碼問題。
主要是系統之間編碼方式不同造成的,國內windows文件名編碼方式一般是gbk,而Linux默認是utf-8,這樣就會導致在windows的文件在Linux下面顯示亂碼。1. zip文件解壓出來亂碼
1.1 unzip支持-O選項
如果系統自帶的unzip支持-O選項,則直接使用以下命令即可,這樣最方便簡單,然而debian stable版本自帶的就不支持。
unzip -O GBK you_zip_file.zipn
1.2 python腳本
我僅對網上流傳的代碼修改了一點點。
#!/usr/bin/env pythonn# -*- coding: utf-8 -*-nnimport osnimport sysnimport zipfilenndocs = """usage:n unzippy zip_file.zip [dest_path]n It needs at least one arguments.n zip_file.zip:n The file needs to be unzipped.n dest_path:n The path you want to extract files.Its default value is current path.n """nif len(sys.argv) == 3:n zip_file = sys.argv[1]n dest_path = os.path.join(os.path.abspath(.), sys.argv[2])nelif len(sys.argv) == 2:n zip_file = sys.argv[1]n dest_path = os.path.abspath(.)nelse:n print(docs)n sys.exit()nnprint "Processing File " + zip_filenfile=zipfile.ZipFile(zip_file,"r");nfor name in file.namelist():n utf8name=name.decode(gbk)n print "Extracting " + utf8namen pathname = os.path.join(dest_path,os.path.dirname(utf8name))n if not os.path.exists(pathname) and pathname!= "":n os.makedirs(pathname)n data = file.read(name)n if not os.path.exists(utf8name):n fo = open(utf8name, "w")n fo.write(data)n fo.closenfile.close()nprint("unzip to %s successfully." % dest_path)n
保存為unzippy ,然後移動到/usr/bin,並添加可執行許可權即可在任意地方使用
sudo mv ./unzippy /usr/bin/ncd /usr/bin/nsudo chmod a+x ./unzippyn
以後就可以直接用unzippy 你的zip文件 要解壓出來的路徑,其中解壓目標路徑可選,默認是當前文件夾下。
UPDATE April 14, 2016 2:32 PM
這個方法並不完美,經常遇到問題。
1.3 7z解壓
先設置bash的lang,用7z解壓出文件,然後再用convmv轉換文件格式是這個方法的主要內容。
sudo apt-get install p7zip-full convmvnLANG=Cn7z x zip_file.zipnconvmv -f gbk -t utf8 --notest -r your_unzipped_file_floder/n或者先cd到解壓好的地方nconvmv -f gbk -t utf8 --notest ./*n
我用這個方法並沒有成功
1.4 給unzip打補丁
根據 ikohara/dpkg-unzip-iconv 上的安裝步驟,給unzip打補丁,然後就可以用-O參數了
1.5 unar方法
這個最簡單省力,默認debian已經安裝了額unar,這個工具會自動檢測文件的編碼,也可以通過-e來指定:
unar file.zipn
即可解壓出中文文件。
2. 文件內容亂碼
2.1 iconv工具
iconv -f gbk -t utf-8 file1 -o file2 # gbk編碼轉換為utf-8n
命令很簡單,可以man出手冊或者--help看一下。
2.2 enca工具
# -L指明文件語言,一般可以省略nenca -L zh_CN file  # 檢查文件的編碼nenca -L zh_CN -x UTF-8 file  # 將文件編碼轉換為"UTF-8"編碼nenca -L zh_CN -x UTF-8 file1 file2  # 如果不想覆蓋原文件可以這樣n
Reference
Linux文件亂碼 - MarshalRUAN - ITeye技術網站
File Roller/Unzip 解壓中文 Zip 文件名亂碼推薦閱讀:
※SpaceVim release 0.5.0
※Arch滾炸了是一種怎麼樣的體驗?
※2017年6款最值得推薦的免費Linux防火牆
※Linux是否會取代Unix?