Python有没有开源包处理GBK Unicode编码问题,pythonunicode,小弟最近使用Python
Python有没有开源包处理GBK Unicode编码问题,pythonunicode,小弟最近使用Python
小弟最近使用Python处理一批新闻语料,主要的工作就是将
<doc><url>http://sports.sina.com.cn/euro2008/video/601/2008-06-06/105.html</url><docno>005e46d7ec87bc5b-63207783d4cca6e0</docno><contenttitle>视频-揭幕战捷克即将亮相 “东欧铁骑”信心十足</contenttitle><content>评论:1北京时间6月4日,捷克国家足球队离开奥地利的因斯布鲁克训练基地,赶赴瑞士准备与东道主的揭幕战。以上是相关视频报道。</content></doc>
细心的朋友或许注意到北京前面有个乱码,此外数字1、6和4都是全角的。全角转半角在unicode下容易,但若文件本身是非unicode编码(比如gbk),就需要先转码。但即使使用正确的解码器,还是无法对文件进行正确地解码,读取第一行就出错了:
>>> news_file.readline()Traceback (most recent call last): File "<stdin>", line 1, in <module>UnicodeDecodeError: 'gbk' codec can't decode byte 0xbf in position 2: illegal multibyte sequence
有些转义字符在gbk编码中出现,也会出现编解码错误的情况:
>>> s = "组图:震前汶川风光震前汶川风光 QQ群4914667.作者肚螂皮">>> s'组图:震前汶川风光\ue40c震前汶川风光\u3000QQ群4914667.作者肚螂皮'>>> news_file = open("D:/news_test.txt", "w")>>> news_file.write(s)Traceback (most recent call last): File "<stdin>", line 1, in <module>UnicodeEncodeError: 'gbk' codec can't encode character '\ue40c' in position 9: illegal multibyte sequence>>>
我试过在open函数中使用errors="ignore",错误是没有了,但这样读取之前
>>> news_file.readline()'<content>组图:震前汶川风光U鹎般氪ǚ绻狻。眩讶海矗梗保矗叮叮罚作者肚螂皮</content>\n'
请问处理上述两种异常情况下并正确地读写文件?有没有开源包能够处理上述问题?
>>> '组图:震前汶川风光\ue40c震前汶川风光\u3000QQ群4914667.作者肚螂皮'.encode('gbk')Traceback (most recent call last): File "<stdin>", line 1, in <module>UnicodeEncodeError: 'gbk' codec can't encode character '\ue40c' in position 9: illegal multibyte sequence>>> '组图:震前汶川风光\ue40c震前汶川风光\u3000QQ群4914667.作者肚螂皮'.encode('gb18030')b'\xd7\xe9\xcd\xbc\xa3\xba\xd5\xf0\xc7\xb0\xe3\xeb\xb4\xa8\xb7\xe7\xb9\xe2\xfd\xa3\xd5\xf0\xc7\xb0\xe3\xeb\xb4\xa8\xb7\xe7\xb9\xe2\xa1\xa1\xa3\xd1\xa3\xd1\xc8\xba\xa3\xb4\xa3\xb9\xa3\xb1\xa3\xb4\xa3\xb6\xa3\xb6\xa3\xb7\xa3\xae\xd7\xf7\xd5\xdf\xb6\xc7\xf2\xeb\xc6\xa4'>>> '组图:震前汶川风光\ue40c震前汶川风光\u3000QQ群4914667.作者肚螂皮'.encode('gbk', errors='replace').decode('gbk')'组图:震前汶川风光?震前汶川风光\u3000QQ群4914667.作者肚螂皮'
我用 GB18030 解码你的文件没有问题:
Python 3.3.3 (default, Nov 26 2013, 13:33:18) [GCC 4.8.2] on linuxType "help", "copyright", "credits" or "license" for more information.>>> d = open('news_test.xml', encoding='gb18030')>>> c = d.read()>>> Python 2.7.6 (default, Nov 26 2013, 12:52:49) [GCC 4.8.2] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> d = open('news_test.xml') >>> b = d.read()>>> c = b.decode('gb18030')>>>
我也遇到了这样的问题,我做法是这样的:
1、先用GB18030读取,decode成Unicode
2、进行全角转成半角
3、将u'\ue40c' replace成空格
4、最后统一按照utf-8输出
PS:其实最开始没做第3条,后来在进行分词的时候,发现了这个问题,然后重新过滤了一遍,其实我不知道还有没有隐藏别的问题,如果不放心的话,还是按照GB18030重新输出吧
附上我的全角转半角的代码
def strq2b(ustring):"""全角转半角"""rstring = ""for uchar in ustring: inside_code=ord(uchar) if inside_code == 12288:#全角空格直接转换 inside_code = 32 elif (inside_code >= 65281 and inside_code <= 65374):#全角字符(除空格)根据关系转化 inside_code -= 65248 rstring += unichr(inside_code)return rstring
你写入的D:/news_test.txt是什么编码的文件?
可是试试chardet啊
编橙之家文章,
相关内容
- 了解python flask.Response(generator())流内容处理的朋友请进,
- Ubuntu火狐浏览器可以用python脚本来控制吗?,ubuntupytho
- Python yield与斐波那契数列问题,pythonyield,def fib():
- Python函数无法运行源码有问题吗?,python源码,>>&g
- Python扩展包问调用C++扩展方式,python,对方只提供了.s
- 想用Python随机生成多个不重复坐标需要用到什么库或是
- 按照《flask web开发》书中方法操作,发不出确认邮件是
- Python动态调用其他模块函数操作问题,python动态模块函
- 需要一个python脚本返回的思路,求分享,python脚本,新手
- Python import语法在python2与python3中有何区别,python2pytho
评论关闭