4. 疑难问题解答 编码识别 说了要确定编码,那么拿到一串二进制要怎么确定编码呢? 
最简单的方法是chardet:(需要安装) 
python -m pip install chardet 
使用非常简单: 
#coding=utf8 from chardet 
import detect
print(detect('这是一串utf8的测试字符')) 
# 结果:`{'confidence': 0.99, 'encoding': 'utf-8'}` 另外例如抓取网站,那么头文件中很有可能有提示如何解码,记得不要忘记了。 
编码转换 很可能因为字符串中参杂了奇怪的东西,导致即使编码种类正确,依旧无法解码。 
我知道我之前讲过了,但可能有人直接跳疑难问题解答嘛。 
这里可以使用decode的第二个参数: 
#coding=utf8 # 字符串中混进了\x00rubbishUtf8String = 'Utf-8字\x00符串' 
print(repr(rubbishUtf8String.decode('utf8', 'replace'))) 
print(repr(rubbishUtf8String.decode('utf8', 'ignore'))) 
特殊平台下编码 很多人都说Windows是个坑,即使在Python 3下面也一样。 
因为中文文件名出来都是乱码。 
这里使用一个取巧的方法:平台编码再特殊,起码命令行读取和创建一个文件夹不会出乱码吧。 
import sys, os 
for folder 
in os.walk('.').next()[1]:
    print(folder.decode(sys.stdin.encoding)) 
同样的输入输出也可以这样做优化: 
import sys 
def sys_print(msg):
    print(msg.encode(sys.stdin.encoding)) 
def sys_input(msg):    
return raw_input(msg.encode(sys.stdin.encoding)).decode(sys.stdin.encoding) 
文件写入 如果抓下来一个内容不知道怎么解码,但还是想要写入文件怎么办 
写入文件的时候制定用二进制命令即可: 
#coding=utf8import urllib 
with open('Utf8.txt', 'wb') 
as f: f.write('Utf8测试') 
# 比如抓了个网页,不知道编码也可以写入文件进行一系列操作 content = urllib.urlopen('http://www.baidu.com').read()
with open('baidu.txt', 'wb') 
as f: f.write(content) 
裸Unicode字符 Unicode存成六个Ascii字符怎么办?其实也可以decode 
#coding=utf8# 这是普通的Unicodes = u'测'
for i 
in s: print(i)
print(repr(s)) 
# 这是裸Unicode,实际存成了六个Asciis = repr(s)[2:-1]
for i 
in s: print(i)
print(repr(s)) 
# 转化其实也很简单s = s.decode('unicode-escape')
for i 
in s: print(i)
print(repr(s))  
好了,希望这篇文章对大家解决Python编码问题有所帮助!
本文版权归黑马程序员Python培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:黑马程序员Python培训学院
首发:http://www.itheima.com/news/python.html