全国咨询/投诉热线: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

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

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