打算用python解析一下网络日志文件。
必然地遇上了中文乱码的问题。
小弟以前学java,用python解决中文乱码的问题真不知道如何入手。
在java下面调试通过的代码,放在python环境下就给我闹脾气了。
费我九牛二虎之力,终于在一位oschina大大的帮助下问题解决了。
python编码的思路主要是:
1.字符串
2.unicode
3.目标编码集 其中(cp936,gb2312,gbk,gb18030貌似可以互相直接转换,大部分的编码是一样的)
了解python的系统编码的结构,先看下以下的一段代码:
import locale
def p(f):
print ‘%s.%s(): %s’ % (f.__module__, f.__name__, f())
# 返回当前系统所使用的默认字符编码
p(sys.getdefaultencoding)
# 返回用于转换unicode文件名至系统文件名所使用的编码
p(sys.getfilesystemencoding)
# 获取默认的区域设置并返回元祖(语言, 编码)
p(locale.getdefaultlocale)
# 返回用户设定的文本数据编码
# 文档提到this function only returns a guess
p(locale.getpreferredencoding)
# \xba\xba是’汉’的gbk编码
# mbcs是不推荐使用的编码,这里仅作测试表明为什么不应该用
print r”‘\xba\xba’.decode(‘mbcs’):”, repr(‘\xba\xba’.decode(‘mbcs’))
#在笔者的windows上的结果(区域设置为中文(简体, 中国))
#sys.getdefaultencoding(): gbk
#sys.getfilesystemencoding(): mbcs
#locale.getdefaultlocale(): (‘zh_cn’, ‘cp936′)
#locale.getpreferredencoding(): cp936
#’\xba\xba’.decode(‘mbcs’): u’\u6c49′