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

首页技术文章正文

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

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

2. 具体操作
 
拿到各种编码的内容自然是不用说,那么如果我们想要自己构造怎么做呢,看下面:
 
#coding=utf8
 
# 字符串前面加u会默认构造出Unicode的字符串
unicodeString = u'Unicode字符串'
 
# 字符串前面什么都不加会构造出默认编码(首行限定了现在的utf8)的字符串
utf8String = 'Utf-8字符串'
 
# 当然,没有首行,默认的编码是Ascii
 
那么他们之间怎么转换呢,同样很简单:
 
# 接上一段程序
 
# Unicode转化为二进制编码中的一种:utf8
unicodeString.encode('utf8')
 
# 二进制编码根据自己的编码种类转化为Unicode
utf8String.decode('utf8')
 
# 如果二进制编码中混进了奇怪的东西可以根据需求用特殊的decode策略
print(repr('u8字\x00符串'.decode('utf8', 'replace')))
 
那么怎么样会出现问题呢:
 
# 接上一段程序
 
# 如果我们把他们转化成同样的编码方式就可以操作(例如相加)
print(repr(unicodeString + utf8String.decode('utf8')))
print(repr(unicodeString.encode('utf8') + utf8String))
 
# 但如果不转化,当然就会出现满世界的烤鸭二舅啦
unicodeString + utf8String
 
# 所以另一方面也发现,编码转换是需要我们告诉程序怎么做的
# 所有`decode`操作都会生成Unicode编码,这是为了方便我之前说的大量接受Unicode的内部命令
 
所以我们需要确定程序使用的编码,这是我们需要告诉程序的东西
 
  • 一方面在操作字符串的时候确定是同种编码
  • 另一方面在使用非自己写的命令时,一般使用Unicode,或者使用接收二进制编码的命令
 
#coding=utf8
# 这里拿写入文件举例
 
# 一般使用Unicode
with open('Unicode.txt', 'w') as f: f.write(u'Unicode测试')
 
# 或者使用接收二进制编码的命令
with open('Utf8.txt', 'wb') as f: f.write('Utf8测试')
 
# 你可以反过来做个测试,自然会报错
# 二进制的命令方便了在不知道怎么解码的情况下也能进行操作(写入文件)
 
3. 建议的使用习惯
 
相信到这里我已经把我对于编码的理解讲完了。
 
我们为什么会碰到各式各样的编码问题:
 
  • 因为我们没有统一编码
  • 因为我们没有用对命令(传对数据)
 
所以这里再重申一下八字真言:确定编码,同类交互
 
  • 碰到问题,问一下自己,我现在是哪种编码
  • 同一种编码才能交互,那我应该是哪种编码
 
这里给出我的使用习惯:
 
  • 确定一种内部编码
  • 内部编码的选择优先级如下:程序必须使用的编码、第三方包使用的编码、你喜欢的编码、Unicode
  • 在输出时再更改到特定的编码
 
记得在开始整个程序之前确定内部的编码,否则编码一团糟会产生很多不必要的bug。
 
不要迷信内部Unicode,例如Evernote开发就应该根据第三方包使用的Utf8确定内部编码。


本文版权归黑马程序员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

pythonAI

在线咨询 我要报名