python3.41 的UnicodeDecodeError:'gbk' codec can't decode byte 0xd3 20
我在用python3.41读取txt文件时用open()来打开文件遇到了UnicodeDecodeError:'gbk'codeccan'tdecodebyte0xd3,...
我在用python3.41读取txt 文件时用open()来打开文件遇到了UnicodeDecodeError:'gbk' codec can't decode byte 0xd3,0xd3说明我的文本里有拉丁文,但是用同样的语句open()在python2.7.6打开时毫无问题。
这一问题的解决办法我找了一个星期,试遍了百度能搜到的各种方法和各种python有关的电子书,没一个能解决的。后来在GOOGLE上发现了:
http://stackoverflow.com/questions/25478421/python-utf-8-codec-cant-decode-byte-0xd3
我把原来的open('***.txt')改成了import codecs codecs.open('***.txt',‘r+’,encoding='iso-8859-15')居然神奇的能打开了。
谁能告诉我:'iso-8859-15'是虾米字符集?python3.41怎么处理文本起来还不如2.7.6??
我相信这个问题应该是相当有价值的! 展开
这一问题的解决办法我找了一个星期,试遍了百度能搜到的各种方法和各种python有关的电子书,没一个能解决的。后来在GOOGLE上发现了:
http://stackoverflow.com/questions/25478421/python-utf-8-codec-cant-decode-byte-0xd3
我把原来的open('***.txt')改成了import codecs codecs.open('***.txt',‘r+’,encoding='iso-8859-15')居然神奇的能打开了。
谁能告诉我:'iso-8859-15'是虾米字符集?python3.41怎么处理文本起来还不如2.7.6??
我相信这个问题应该是相当有价值的! 展开
展开全部
ISO 8859-15,正式编号为ISO/IEC 8859-15:1999,又称Latin-9,俗称Latin-0,是国际标准化组织内ISO/IEC 8859的其中一个8位字符集。
这个字符集于1998年制定,藉以加入在ISO/IEC 8859-1字符集缺少的法语 Œ œ 字母和 Ÿ 字母,及芬兰语 Š š, Ž ž 字母。同时,它亦把 ¤(通用货币符号)换成 €(欧元符号)。
位置
0xA4 0xA6 0xA8 0xB4 0xB8 0xBC 0xBD 0xBE
8859-15
€ Š š Ž ž Œ œ Ÿ
8859-1
¤ ¦ ¨ ´ ¸ ¼ ½ ¾
此字符集同时能支援以下文字:阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、英语、爱沙尼亚语、法罗语、芬兰语、法语、弗里斯语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语(新拼字法)、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语、瑞典语。
Python2.x里的str和unicode有区别,从字面意义上看容易混淆,实际上,你可以把它理解成str是“字节串”,unicode是“字符串”(string总是翻译成“字符串”,在这里就很容易把人绕晕),看下面的例子:
# -*- coding: gb2312 -*-
s = "张三李四"
print len(s) #=> 8
u = s.decode('gbk')
print len(u) #=> 4
我的脚本编码用的是GBK,而不是UTF-8,你会看到len(s)是8,这是这四个汉字所用的实际8个“字节”,而len(u)是4,这就表示这里有4个“字符”
encode和decode是什么意思呢?所谓编码,就是把意义转换成符号;而解码,就是把符号还原成意义。在这里,encode应该理解成把抽象的字符转换成具体的字节,而decode是把具体的字节还原成抽象的字符
这个字符集于1998年制定,藉以加入在ISO/IEC 8859-1字符集缺少的法语 Œ œ 字母和 Ÿ 字母,及芬兰语 Š š, Ž ž 字母。同时,它亦把 ¤(通用货币符号)换成 €(欧元符号)。
位置
0xA4 0xA6 0xA8 0xB4 0xB8 0xBC 0xBD 0xBE
8859-15
€ Š š Ž ž Œ œ Ÿ
8859-1
¤ ¦ ¨ ´ ¸ ¼ ½ ¾
此字符集同时能支援以下文字:阿尔巴尼亚语、巴斯克语、布列塔尼语、加泰罗尼亚语、丹麦语、荷兰语、英语、爱沙尼亚语、法罗语、芬兰语、法语、弗里斯语、加利西亚语、德语、格陵兰语、冰岛语、爱尔兰盖尔语(新拼字法)、意大利语、拉丁语、卢森堡语、挪威语、葡萄牙语、里托罗曼斯语、苏格兰盖尔语、西班牙语、瑞典语。
Python2.x里的str和unicode有区别,从字面意义上看容易混淆,实际上,你可以把它理解成str是“字节串”,unicode是“字符串”(string总是翻译成“字符串”,在这里就很容易把人绕晕),看下面的例子:
# -*- coding: gb2312 -*-
s = "张三李四"
print len(s) #=> 8
u = s.decode('gbk')
print len(u) #=> 4
我的脚本编码用的是GBK,而不是UTF-8,你会看到len(s)是8,这是这四个汉字所用的实际8个“字节”,而len(u)是4,这就表示这里有4个“字符”
encode和decode是什么意思呢?所谓编码,就是把意义转换成符号;而解码,就是把符号还原成意义。在这里,encode应该理解成把抽象的字符转换成具体的字节,而decode是把具体的字节还原成抽象的字符
追问
为何python3.41处理带拉丁文的txt文件会出现UnicodeDecodeError:
问题,而2.7.6版本的却不会?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询