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

Python技术文章2016-08-26 |程序圆python培训学院 |Python培训,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=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# 这是普通的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培训学院所有,欢迎转载,转载请注明程序圆出处。谢谢!程序圆:程序圆教程网首发:http://www.itcast.cn/Python/ 

Python教程

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

2021-5-5 8:39:07

Python教程

Python培训之移动端页面适配四大方式

2021-5-5 14:38:57

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索