Python 3读取文件出现Unicode乱码,纯文本显示正常求助
解决Python读取文件时的UTF-16编码乱码问题
哈哈,这个坑我踩过!你看到的ÿþ前缀加上每个字符后面跟着的\x00,百分百是**带BOM的UTF-16LE(小端序)**编码文件搞的鬼。
为啥直接用文本编辑器打开正常?因为系统自带的记事本这类工具会自动识别文件开头的BOM(字节顺序标记),自动切换到对应的编码显示。但Python的open()函数默认用你系统的默认编码(一般是UTF-8)去读,用UTF-8解析UTF-16的内容,自然就出现乱码了。
给你两个靠谱的解决办法:
直接指定编码读取:既然已经看出来是UTF-16编码,直接在
open()里加上encoding参数就行,Python会自动处理BOM:with open(filename, encoding='utf-16') as f: content = f.readlines() return content自动检测编码(适合不确定编码的情况):如果以后碰到类似但不确定编码的文件,可以用
chardet库先检测编码,再读取。先安装库:pip install chardet然后用下面的代码:
import chardet # 先以二进制模式读取文件,检测编码 with open(filename, 'rb') as f: raw_data = f.read() detect_result = chardet.detect(raw_data) file_encoding = detect_result['encoding'] # 用检测到的编码读取文件 with open(filename, encoding=file_encoding) as f: content = f.readlines() return content
这样应该就能正常读出你要的内容啦!
内容的提问来源于stack exchange,提问作者chuseuiti
相关产品推荐
相关产品推荐

