Unicode是计算机可以支持这个星球上多种语言的秘密武器。通过使用一个或者多个字节来表示一个字符的方法突破了ASCII的限制。Unicode可以表示超过90000个字符。

使用方式:a=u'hello' #Unicode String

String的内建函数str()和chr()并没有升级来处理Unicode,新的内建函数unicode()和unichar()可以看做是Unicode版本的str()和chr()。

Codec是什么?

codec是COder/DECoder的首字母组合。他定义了文本和二进制的转换方式,支持4中耳熟能详的编码方式:ASCII、IOS8859-1。utf-8、utf-16

编码解码:encode()函数解决了编码问题,decode()函数解决了解码问题

可以通过下面一个简单的例子来进行进一步的了解。

'''
An example of reading and writing Unicode String:writes
a Unicode String to a file in utf-8 and reads it back in
'''
CODEC='utf-8'
FILE='unicode.txt' hello_out=u'Hello World\n'
bytes_out=hello_out.encode(CODEC)
f=open(FILE,'w')
f.write(bytes_out)
f.close() f=open(FILE,'r')
bytes_in=f.read()
f.close()
hello_in=bytes_in.decode(CODEC)
print hello_in

运行该程序,我们会得到如下输出:Hello World  同时在文件系统会多一个unicode.txt的文件,里面的内容和输出的一致。

上面说的处理Unicode的例子简单的让人感觉有点假。把Unicode运用到实际应用中,你需要遵守以下规则:
1、程序中出现字符串时候一定要加个前缀u
2、不要用str()函数,用unicode()函数代替
3、不要用过时的string模块——如果传给他的是非ASCII字符,他会把一切搞砸
4、不到必须时候不要在你的程序里编解码Unicod字符。只在你要写入文件或者数据库或者网络是,才调用encode()函数,相应的,只在你需要把数据读回来的时候才使用decode()函数。
注意这些,你就可以避免90%的由于Unicode引起的bug,现在的问题是剩下的10%是处理不了的,幸亏Python提供了大量的模板和库来替你处理这些问题。

Unicode基本概念的更多相关文章

  1. Unicode 编码概念

    Unicode 编码概念 Unicode 编码可能是我们日常开发中接触最多的字符编码方式之一,其它常见的中文编码方式还包括 GB2132-80 / GB13000 / GBK / GB18030 .在 ...

  2. unicode 和utf-8,GBK编码

    说到编码,得先从ASCII编码讲起.ASCII编码是由美国人发明,美国的字符不超过255个,所以ASCII编码使用了8bit 即一个字节来存储字符.由于汉字的数量远超255个,所以中国自己发明了一个G ...

  3. 每个 JavaScript 开发者都该懂的 Unicode

    英文原文标题:what-every-javascript-developer-should-know-about-unicode (译者注:本文含有Unicode辅助平面的特殊字符,部分浏览器可能无法 ...

  4. 字符集编码(三):Unicode

    前面<字符集编码(上):Unicode 之前>我们讲了在二十世纪九十年代 Unicode 出现之前各厂商和标准化组织为了应对不同语言文字的编码需求而设计了各种互不兼容的字符集编码标准,这使 ...

  5. 寻找C语言和.NET之间的桥梁

    一提到C语言,在偶这个始终的C语言菜鸟眼里,是个神奇的语言.经过了近半世纪的历史,多少技术湮灭在信息时代的长河中,C语言却依然在TIBOE排行榜中笑傲群雄. 本文是谈.NET开发者看来,C语言有什么特 ...

  6. 《Python 二三事》——python学习必看(转载)

        面向初学者介绍Python相关的一些工具,以及可能遇到的常见问题. 原文出处 原文作者:八八年出生的男性,互联网上常用id是 jagttt .目前正从事 IT 行业的工作.业余爱好是动漫游加电 ...

  7. utf-8与utf-8(无BOM)的区别

    BOM——Byte Order Mark,就是字节序标记   在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF.而FFFE ...

  8. 彻底解密C++宽字符(一)

    彻底解密C++宽字符(一) 转:http://club.topsage.com/thread-2227977-1-1.html 1.从char到wchar_t “这个问题比你想象中复杂” 从字符到整数 ...

  9. 对C++ Local的经典分析(转)

    对C++ Local的经典分析 本贴转载自:再别流年的技术实验室 文章地址: http://kittsoft.xp3.biz/?p=86 “这个问题比你想象中复杂”(我也学下BS的风格,虽然这句话是我 ...

随机推荐

  1. iOS App上架流程(2016详细版

    http://www.jianshu.com/p/b1b77d804254 iOS App上传项目遇到的问题 http://www.jianshu.com/p/9195cd991fc7

  2. LeetCode----Copy List with Random Pointer 深度拷贝,浅度拷贝,Lazy拷贝解析

    题目:A linked list is given such that each node contains an additional random pointer which could poin ...

  3. 数位dp-POJ-3252-Round Numbers

    最近一直在看书和博客,即使做出几道题来也是看别人题解写的,感觉没自己的东西,所以很久没更新博客 看了很多数位dp的题和题解,发现数位dp题是有固定的模版的,并且终于自己做出来一道. 我觉得用记忆化搜索 ...

  4. 【Tsinghua OJ】循环移位(Cycle)

    Description Cycle shifting refers to following operation on the sting. Moving first letter to the en ...

  5. C#基础知识学习

    C#基础知识整理 学习地址:http://blog.csdn.net/column/details/csarp.html

  6. Tiling Up Blocks_DP

    Description Michael The Kid receives an interesting game set from his grandparent as his birthday gi ...

  7. Quirks模式是什么?

    什么是DOCTYPE: DOCTYPE,或者称为 Document Type Declaration(文档类型声明,缩写 DTD).通常情况下,DOCTYPE 位于一个 HTML 文档的最前面的 位置 ...

  8. 脚本语言&& Performance Testing

    watin: http://www.cnblogs.com/dahuzizyd/archive/2007/04/13/ruby_on_rails_windows_instatnrails_study_ ...

  9. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 数据库报错

    -- 查询mysql 数据库链接空闲时间持有最大空闲时间,单位为秒 SHOW VARIABLES WHERE VAriable_name = 'interactive_timeout'; -- 会出现 ...

  10. spark streaming 实现接收网络传输数据进行WordCount功能

    package iie.udps.example.operator.spark; import scala.Tuple2; import org.apache.spark.SparkConf; imp ...