全国咨询/投诉热线:400-618-9090

首页技术文章正文

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

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名