Python的中文字符乱码

打算用Python解析一下网络日志文件。

必然地遇上了中文乱码的问题。

小弟以前学Java,用Python解决中文乱码的问题真不知道如何入手。

在Java下面调试通过的代码,放在Python环境下就给我闹脾气了。

 

费我九牛二虎之力,终于在一位Oschina大大的帮助下问题解决了。

Python编码的思路主要是:

1.字符串

2.Unicode

3.目标编码集 其中(CP936,GB2312,GBK,GB18030貌似可以互相直接转换,大部分的编码是一样的)

 

了解Python的系统编码的结构,先看下以下的一段代码:

Python代码

 收藏代码

  1. import locale   
  2.     
  3. def p(f):   
  4.     print '%s.%s(): %s' % (f.__module__, f.__name__, f())   
  5.     
  6. # 返回当前系统所使用的默认字符编码   
  7. p(sys.getdefaultencoding)   
  8.     
  9. # 返回用于转换Unicode文件名至系统文件名所使用的编码   
  10. p(sys.getfilesystemencoding)   
  11.     
  12. # 获取默认的区域设置并返回元祖(语言, 编码)   
  13. p(locale.getdefaultlocale)   
  14.     
  15. # 返回用户设定的文本数据编码   
  16. # 文档提到this function only returns a guess   
  17. p(locale.getpreferredencoding)   
  18.     
  19. # \xba\xba是'汉'的GBK编码   
  20. # mbcs是不推荐使用的编码,这里仅作测试表明为什么不应该用   
  21. print r"'\xba\xba'.decode('mbcs'):", repr('\xba\xba'.decode('mbcs'))   
  22.     
  23. #在笔者的Windows上的结果(区域设置为中文(简体, 中国))   
  24. #sys.getdefaultencoding(): gbk   
  25. #sys.getfilesystemencoding(): mbcs   
  26. #locale.getdefaultlocale(): ('zh_CN', 'cp936')   
  27. #locale.getpreferredencoding(): cp936   
  28. #'\xba\xba'.decode('mbcs'): u'\u6c49'   

 学习Python的时候,有个repr()函数。

这个函数是用来揭示字符串的本来面目!!

同样是  “你好”

utf-8的格式是 \\xc4\\xe3\\xba\\xc3

GBK格式是  u'\\u4f60\\u597d

当你不了解你的字符编码的格式,可以用repr函数打开它来看一下。

 

在编码转换的过程中,经常会有字节丢失,导致转换编码过程失败。

所以,我们会在编码转换过程中加上 ignore 并打印错误异常:

Python代码

 收藏代码

  1. import sys   
  2. import urllib  
  3.   
  4. def urlResolve(url):  
  5.     try:  
  6.         output = url.decode('utf8','ignore').encode('gbk')  
  7.         return output  
  8.     except:  
  9.         print  ' ERROR ',sys.exc_info(),url  

 使用了ignore以后,就会忽略编码中的错误,尽可能地进行编码的翻译。

 

对于Python普通的py文件,往往会加上:

#!/usr/bin/env python
#coding=utf-8
或者

#!/usr/bin/env python
#coding=gbk
来指定文件的编码格式。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值