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?

TAG:Linux | 乱码 | 解压缩 |