第一步、检查文件格式
file -i filename
或者
file --mime-encoding filename
这将输出文件的编码格式。例如:
filename: text/plain; charset=iso-8859-1
这里 iso-8859-1
就是我的文件的编码格式。
第二步、利用iconv
转换编码
假设我的名为input.txt 的文件,其编码经过第一步的检查,格式为 ISO-8859-1
,我希望将其转换为UTF-8
编码,并输出到 output.txt。一般到这里就应该可以看到正常的中文字符了,但是如果仍然存在乱码,则需要第三步。
iconv -f ISO-8859-1 -t UTF-8 input.txt -o output.txt
参数解释:
-f
ISO-8859-1:指定输入文件 input.csv 的字符编码是 ISO-8859-1。-t
UTF-8:指定输出文件的字符编码为 UTF-8。- input.txt:要转换的输入文件。
- -
o
output.txt:指定转换后的文件输出到 output.txt。
第三步、如果仍然乱码,利用chardet
检测文件实际编码
如果经过后iconv
转换后中文仍然乱码,可能的原因是文件实际上不是iso-8859-1
编码的,或者原始文件在 ISO-8859-1
编码下就已经出现了乱码。这里我们尝试使用 chardet
工具来检测文件的实际编码。
(1)安装chatdet
:
sudo apt-get install python3-chardet
(2)检测文件编码:
chardet input.txt
输出将显示文件的编码和置信度。例如:
input.txt: GB2312 with confidence 0.99
(3)继续利用iconv
进行文件类型的转化。
iconv -f GB2312 -t UTF-8 input.txt -o output.txt
再打开output.txt,就可以看到正常的中文字符了。