python中文字符乱码解决方法

发布时间:2020-03-29编辑:脚本学堂
本文介绍了python编程中,有关中文字符乱码的解决方法,有需要的朋友参考学习下。

python解析网络日志文件,碰到了中文乱码的问题。
小弟以前学java,用python解决中文乱码的问题真不知道如何入手。
在java下面调试通过的代码,放在python环境下就给我闹脾气了。
 
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)  
   
# xbaxba是'汉'的gbk编码  
# mbcs是不推荐使用的编码,这里仅作测试表明为什么不应该用  
print r"'xbaxba'.decode('mbcs'):", repr('xbaxba'.decode('mbcs'))  
   
#在笔者的windows上的结果(区域设置为中文(简体, 中国))  
#sys.getdefaultencoding(): gbk  
#sys.getfilesystemencoding(): mbcs  
#locale.getdefaultlocale(): ('zh_cn', 'cp936')  
#locale.getpreferredencoding(): cp936  
#'xbaxba'.decode('mbcs'): u'u6c49'  
 

 学习python的时候,有个repr()函数。
这个函数是用来揭示字符串的本来面目!!
同样是  “你好”
utf-8的格式是 xc4xe3xbaxc3
gbk格式是  u'u4f60u597d
当你不了解你的字符编码的格式,可以用repr函数打开它来看一下。
 
编码转换的过程中,经常会有字节丢失,导致转换编码过程失败。
所以,会在编码转换过程中加上 ignore 并打印错误异常:
 

复制代码 代码示例:
import sys  
import urllib 
 
def urlresolve(url): 
    try: 
        output = url.decode('utf8','ignore').encode('gbk') 
        return output 
    except: 
        print  ' error ',sys.exc_info(),url 
 

 使用了ignore以后,就会忽略编码中的错误,尽可能地进行编码的翻译。
 
对于python普通的py文件,往往会加上:
 

复制代码 代码示例:
#!/usr/bin/env python
#coding=utf-8
或者
#!/usr/bin/env python
#coding=gbk
 

来指定文件的编码格式。