Python处理中文的时候的一些小技巧

         如果你像我一样希望能够把事情尽快做好而不去深究,你可能会写一些异常处理的代码把 UnicodeEncodingError糊弄过去先,但当你开始怀疑有多少encoding出错的信息被你丢弃的时候,可能你会很惊奇。于是,你还是会想坐下来,(洗把脸)然后面对自己必须弄懂什么是utf-8,什么是 ‘gb2312’, 什么是 ‘gbk’ 和其中的猫腻。正如有时候猛撕小伤口上邦迪胶布的快感一样,有时候当你认真面对一些你平时一直回避的问题的时候(其实有时候需要的不是勇气), 你反而会觉得“不过如此”,并且能够一劳永逸的解决问题。

关于Python处理Unicode,我所能找到的最言简意赅的入门教程是:

Unicode In Python, Completely Demystified (揭秘Python Unicode)

 

简要罗列一下最重要最实用的点:

 

Solution

  1. Decode early (尽早decode, 将文件中的内容转化成 unicode 再进行下一步处理)
  2. Unicode everywhere (程序内部处理都用unicode)
  3. Encode late (最后encode回所需的encoding, 例如把最终结果写进结果文件)

1. Decode early

Decode to <type ‘unicode’> ASAP

>>> def to_unicode_or_bust(

…         obj, encoding=’utf-8′):

…     if isinstance(obj, basestring):

…         if not isinstance(obj, unicode):

…             obj = unicode(obj, encoding)

…     return obj

>>>

detects if object is a string and if so converts to unicode, if not already.

2. Unicode everywhere

>>> to_unicode_or_bust(ivan_uni)

u’Ivan Krsti\u0107′

>>> to_unicode_or_bust(ivan_utf8)

u’Ivan Krsti\u0107′

>>> to_unicode_or_bust(1234)

1234

3. Encode late

Encode to <type ‘str’> when you write to disk or print

>>> f = open(‘/tmp/ivan_out.txt’,’w’)

>>> f.write(ivan_uni.encode(‘utf-8’))

>>> f.close()

我以前一直觉得unicode相关的处理都是很 dirty 的工作,一般都会一边尝试,一边用异常处理去补丁,看完以上这个教程以后豁然开朗。

祝大家也能早日理清处理中文的时候的头绪,坦然直面“神秘”的unicode

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值