4
回答
请问这个是不是python字符串编码转换bug?
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
在处理网页的时候需要将big5编码的字节转码成utf-8的字符串,但是程序出现错误,出问题的字节是‘\xf9\xda’这两个,在big5中是"恒"字,python无法转换,说不是big5编码的字节,但是我已查过码表,字节无误,而用ruby却可以正常转换。

有问题的代码如下:

#python3.3.2
print(b'\xf9\xda'.decode('big5'))
#UnicodeDecodeError: 'big5' codec can't decode byte 0xf9 in position 0: illegal multibyte sequence
同样字节在ruby下正常:


#ruby 2.0
print("\xf9\xda".encode('utf-8','big5'))#->恒
请问这到底是我的方法不对还是python本身的bug??


举报
hllyt
发帖于4年前 4回/503阅
共有4个答案 最后回答: 4年前

引用来自“七念”的答案

http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT

请看这里:

#	Notes:
#
#	1. In addition to the above, there is some uncertainty about the
#       mappings in the range C6A1 - C8FE, and F9DD - F9FE.  The ETEN
#	version of BIG5 organizes the former range differently, and adds
#	additional characters in the latter range.  The correct mappings
#	these ranges need to be determined.
具体RUBY怎么处理这个的,不清楚...

感谢回复,但是英文看不太懂,呵呵,到晚上再仔细看看是怎么处理的

不能算Python的BUG……BIG5是无法完美转Unicode……

不过Ruby在1.9对编码改进极大……估计是连这些地方都解决了……

引用来自“Kabie”的答案

不能算Python的BUG……BIG5是无法完美转Unicode……

不过Ruby在1.9对编码改进极大……估计是连这些地方都解决了……

找到个针对此问题的解决方案,在知乎上有人回复的,用hkscs编码来代替

print(b'\xf9\xda'.decode('hkscs'))#-》恒

但是我看了下,hkscs还是有部分字体无法映射到utf-8的,不过好在都是极少用字

感谢二位的回复,谢谢

顶部