ansi编码_了解字符编码,不再恐惧文件乱码
背景:
工作上,不同部門經常需要共享文件,偶爾會出現打開文件出現的是一堆亂碼,這時候很多人的第一反應是恐懼,認為是數據傳輸出現錯誤問題,要求發送方再重新傳輸一份。其實主要都是字符編碼不一致的原因,只要了解字符編碼原理,自己做好編碼轉化,一般都能快速恢復正常閱讀。
目標:
了解字符編碼
不再恐懼文件亂碼
1 常見亂碼現象
1.1 txt文件用UE打開是亂碼
1.2 csv文件用打開Excel打開是亂碼
1.3 命令行讀取文件是亂碼
2 常見字符編碼類型
2.1 字符編碼ANSI和ASCII區別、Unicode和UTF-8區別
這篇文章解釋很清晰:字符編碼ANSI和ASCII區別、Unicode和UTF-8區別
2.2 概括
總結起來就是,之所以有這么多編碼,都是為了實現兼容和效率的平衡,兼容性越高的編碼就需要犧牲越大的存儲空間。
ASCII:最簡單的編碼,不能解析中文
ANSI:ASCII的擴展,可以解析中文,兼容差,效率高
Unicode:ANSI的擴展,兼容強,效率低
UTF8:Unicode的擴展,通用
2.3 常用工具打開文件的解析方式
最常用接觸就是ANSI和UTF8兩種編碼
ANSI:Windows,DOS,記事本,UltraEdit,Excel,Oracle
UTF8:Linux,Hadoop,Python、記事本
其中記事本可以自動解析ANSI和UTF8。
如果我們在Windows打開文件出現亂碼,一般都是因為文件是UTF8編碼,用記事本打開就可以正常顯示,把文件另存為ANSI編碼,就可以用其他工具正常打開。
反過來,傳到服務器端后臺打開是亂碼,一般是服務器默認解析UTF8編碼,把文件轉為UTF8編碼就可以正常讀取。
3 Windows轉碼
3.1 記事本轉換
用記事本打開文件,另存為,編碼,一般選ANSI或UTF-8。
3.2 CMD轉換
調用PowerShell的get-content、set-content命令
PowerShell -Command "& {get-content test1.txt -encoding Default | set-content test2.txt -encoding UTF8}"
4 Linux轉碼
調用iconv命令,
iconv -c -f ansi -t utf-8 test1.txt > test2.txt
5 Python轉碼
5.1 解析文件
with open('test1.txt','r',encoding='ANSI') as f:
content_str=f.read()
5.2 將ANSI轉為utf-8
with open('test2.txt','w',encoding='utf-8') as f:
f.write(content_str)
5.3 自動轉碼函數
#chardet.detect有自動判斷文件的編碼類型功能
import chardet
def convert(path,out_enc='utf-8'):
#解碼
with open(path,'rb') as f:
content_bytes=f.read()
source_encoding=chardet.detect(content_bytes).get('encoding')
print(source_encoding)
#讀取文本
with open(path,'r',encoding=source_encoding) as f:
content_str=f.read()
#保存文本
with open(path,'w',encoding=out_enc) as f:
f.write(content_str)
print(out_enc)
總結
以上是生活随笔為你收集整理的ansi编码_了解字符编码,不再恐惧文件乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++趣味小程序_工具类小程序10天增长
- 下一篇: 调用支付jsapl缺少参数:totalf