Python读取文件时省略号显示乱码的原因及解决方法咨询
嗨,这个问题我碰到过好多次,本质就是编码不匹配搞的鬼,我给你掰扯清楚:
问题原因
这是典型的编码不匹配问题。当你调用open()函数时如果不指定encoding参数,Python会自动使用当前操作系统的默认编码来读取文件——比如Windows上默认是cp1252或者gbk,而你的File.txt大概率是用UTF-8编码保存的。
那个让你头疼的省略号…是Unicode字符U+2026,在UTF-8编码里它占3个字节:0xE2 0x80 0xA6。如果用cp1252这种单字节编码去解码这三个字节,就会被错误地解析成â、€、¦三个字符,拼起来就是你看到的…乱码。
解决方法
最直接的办法就是在open()里明确指定文件的实际编码,比如文件是UTF-8的话,改成这样:
# 注意路径里的反斜杠要转义,或者用原始字符串r'Folder\File.txt'避免转义问题 with open('Folder\\File.txt', encoding='utf-8') as fileToRead: a = fileToRead.read()
要是不确定文件到底用的什么编码,可以借助第三方库chardet来检测(先通过pip install chardet安装):
import chardet # 先以二进制模式读取文件内容,检测编码 with open('Folder\\File.txt', 'rb') as f: detect_result = chardet.detect(f.read()) # 用检测到的编码打开文件 with open('Folder\\File.txt', encoding=detect_result['encoding']) as fileToRead: a = fileToRead.read()
需要注意的其他特殊符号
除了省略号,还有不少Unicode特殊字符容易触发类似的编码问题,比如:
- 智能引号:
“”‘’(不是键盘上的普通双引号/单引号,常见于Word导出的文本) - 长破折号:
—(区别于两个短横--) - 版权/商标符号:
©、®、™ - 带重音的欧洲语言字符:比如
é、à、ñ - 非英文标点:比如中文的
。,;、日文假名等
这些字符在UTF-8里都是多字节存储的,如果用单字节编码(比如cp1252、gbk)读取,都会出现类似的乱码情况,所以读取文件时最好养成指定编码的习惯。
内容的提问来源于stack exchange,提问作者Dodeius
相关产品推荐
相关产品推荐

