首页技术文章正文

Python培训之5分钟战胜Python字符编码(三)

更新时间:2017-04-16 来源:黑马程序员Python培训学院 浏览量:

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
 
# 字符串中混进了\x00
rubbishUtf8String = '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=utf8
import 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
# 这是普通的Unicode
s = u'测'
for i in s: print(i)
print(repr(s))
 
# 这是裸Unicode,实际存成了六个Ascii
s = 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

分享到:
在线咨询 我要报名
和我们在线交谈!