转自http://www.qmailer.net/archives/251.html
Python2包括Python26、Python27等的字符串通常包含str、unicode两种类型通常str的字符串编码方式由源码文件的编码方式决定目前使用的基本都是UTF-8的编码格式所以要在py文件的头部指定编码格式
1 # -*- coding: utf-8 -*-在Python程序内部通常使用的字符串为unicode编码这样的字符串字符是一种内存编码格式如果将这些数据存储到文件或是记录日志的时候就需要将unicode编码的字符串转换为特定字符集的存储编码格式比如UTF-8、GBK等等很多时候Python程序员都会遇到乱码问题相信以下的一些处理方式和技巧能帮助大家解决乱码问题。
unicode到utf-8转换方法unicodestr.encode(‘utf-8’) 示例
1 2 >>> u中文测试.encode(utf-8) \xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95utf-8到unicode转换方法utf8str.decode(‘utf-8’)示例
1 2 >>> 中文测试.decode(utf-8) u\u4e2d\u6587\u6d4b\u8bd5实际上在将unicode存储到文本的过程中还有一种存储方式不需要将unicode转换为实际的文本存储字符集而是将unicode的内存编码值进行存储读取文件的时候再反向转换回来是采用unicode-escape的转换方式。
unicode到unicode-escape转换方法unicodestr.encode(‘unicode-escape’)示例
1 2 >>> u中文测试.encode(unicode-escape) \\u4e2d\\u6587\\u6d4b\\u8bd5unicode-escape到unicode的转换方法unicodeescapestr.decode(‘unicode-escape’)示例
1 2 >>> \\u4e2d\\u6587\\u6d4b\\u8bd5.decode(unicode-escape) u\u4e2d\u6587\u6d4b\u8bd5对于utf-8编码的字符串在存储的时候通常是直接存储而实际上也还有一种存储utf-8编码值的方法即string-escape。 utf-8到string-escape的转换方法utf8str.encode(‘string-escape’)示例
1 2 3 4 >>> 中文测试.encode(string-escape) \\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95 >>> print \\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95 \xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95string-escape到utf-8的转换方法strescapestr.decode(‘string-escape’)示例
1 2 3 4 >>>’\\xe4\\xb8\\xad\\xe6\\x96\\x87\\xe6\\xb5\\x8b\\xe8\\xaf\\x95.decode(string-escape) \xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95’ >>> print \xe4\xb8\xad\xe6\x96\x87\xe6\xb5\x8b\xe8\xaf\x95 中文测试备注 unicode同时还支持的编码转换包括
1 2 3 idna raw_unicode_escape utf_8_sigutf-8、gbk等编码字符串还支持得编码转换包括
1 2 3 4 5 6 7 base64 quopri bz2 hex unicode_internal uu zlib