一、字符编码中ASCII、Unicode和UTF-8的区别

点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html

再推荐一篇相关博文:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html

二、Unicode与ASCII

Python能处理Unicode和ASCII编码,为了让这两者看起来尽可能的相似,Python字符串从原来简单的类型改成了真正的对象。ASCII字符串成了StringType、Unicode字符串成了UnicodeType。使用如下:

>>> "hello world"    #ASCII string
'hello world'
>>> u"hello world"    #Unicode string
u'hello world'
>>> 

1、str()、chr()只能以0~255作为参数,也即是说只处理ASCII字符串。如果有Unicode字符串,则会先自动转换成ASCII的然后在传入这些函数中。

原因:Unicode支持的字符多,如果在str()、chr()中有ASCII不存在的字符,则会发生异常。

2、unicode()、unichar()可以看做是Unicode版本的str()和chr()。

>>> unicode('hello world')
u'hello world'

三、编码与解码

它们解决的问题就是编码(encode())、解码(decode())问题,不至于出现乱码。

Codec表示编码方式。

""" 把一个Unicode字符串写入到磁盘文件,然后再把它读出并显示;
    写入的时候用UTF-8,读也一样用UTF-8。"""

CODEC = 'utf-8'
FILE = 'demo.txt'

strIn = u'BeginMan will be a great coder'
byte_strIn = strIn.encode(CODEC)  #以uft-8进行编码
f = open(FILE,'w')
f.write(byte_strIn)
f.close()

f = open(FILE,'r')
str = f.read()
f.close()
str_out = str.decode(CODEC) #以utf-8进行解码
print str_out   #输出:BeginMan will be a great coder

注意:

1、程序中出现字符串时一定要在前面加上前缀u

s= '博客园Cnblog'  #不要这样写,这样容易乱码如:鍗氬鍥瑿nblog
s = u'博客园Cnblog'#正确

2、不要使用str()函数,尽量用unicode()代替

3、不要使用过时的string 模块

4、没必要在程序中编码或解码unicode字符串,编码解码一般用于操作文件、数据库、网络等才使用。

5、字符串格式化

>>> '%s %s' %('Begin','man')
'Begin man'

#还记得上次的关于字符串的博客中说到的:“普通字符串与unicode字符串能转换成unicode字符串”
>>> u'%s %s' %(u'Begin',u'Man')
u'Begin Man'
>>> u'%s %s' %('Begin','Man')
u'Begin Man'
>>> '%s %s' %(u'Begin','man')
u'Begin man'
>>> '%s %s' %('Begin',u'man')
u'Begin man'

最新文章

  1. mongoose数据库连接和操作
  2. NoSQL数据库探讨之一 - 为什么要用非关系数据库?
  3. Grid Infrastructure Single Client Access Name (SCAN) Explained (文档 ID 887522.1)
  4. USACO Section 4.4 追查坏牛奶Pollutant Control
  5. 显式参数 VS 隐式参数
  6. VMware系统运维(六)VMware vSphere Web Client安装
  7. sqlserver 日期相关2
  8. 1002 GTY's birthday gift
  9. Java之绘制二次曲线
  10. 【HDOJ】3277 Marriage Match III
  11. 【IBM】Merlin 给 Java 平台带来了非阻塞 I/O
  12. 练习使用css3实现3d按钮
  13. Scala中的override
  14. Kinect 深度图像格式
  15. gcc编译C源文件
  16. Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
  17. 再次聊一聊promise settimeout asycn awiat执行顺序---js执行机制 EVENT LOOP
  18. [PHP] 算法-选择排序的PHP实现
  19. Z-index研究 opacity和z-index一起使用
  20. 引:Jmeter添加变量的四种方法

热门文章

  1. Metaweblog在Android上使用
  2. 在Oracle Linux Server release 6.4下配置ocfs2文件系统
  3. 2.C#中通过委托Func消除重复代码
  4. PS 如何改变一个icon的颜色
  5. Android实现自适应正方形GridView(陌陌引导页面效果)
  6. JS - IE中没有console定义
  7. Etl之HiveSql调优(union all)
  8. git delete repository
  9. MTNET 自用ios网络库开源
  10. UNIX环境高级编程笔记之进程环境