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. (转)js函数参数设置默认值

    原文:http://www.cnblogs.com/RightDear/archive/2013/06/26/3156652.html js函数参数设置默认值   php有个很方便的用法是在定义函数时 ...

  2. UNIX 网络编程第三版

    第五章p102: ps -t  pts/6 -o pid,ppid,tty,stat,args,wchan 在我的系统上运行时出现:TTY not found linux发行版为mint17.1 改用 ...

  3. ios应用数据存储方式

    一.ios应用常用的数据存储方式 1.plist(XML属性列表归档) 2.偏好设置 3.NSKeydeArchiver归档(存储自定义对象) 4.SQLite3(数据库,关系型数据库,不能直接存储对 ...

  4. 考古备份:a.out文件ELF文件头中魔数的由来

    来源: <程序员的自我修养>3.4节. 补充: http://wiki.osdev.org/ELF http://www.linux-mag.com/id/116/ http://en.w ...

  5. Java容器类概述

    1.简介 容器是一种在一个单元里处理一组复杂元素的对象.使用集合框架理论上能够减少编程工作量,提高程序的速度和质量,毕竟类库帮我们实现的集合在一定程度上时最优的.在Java中通过java.util为用 ...

  6. # 20145210 《Java程序设计》第03周学习总结

    教材学习内容总结 第四章 类与对象 在定义类这个小结里,有很多新的术语,书上的比喻很形象,对于理解这部分的内容有很大帮助,现总结如下: •类与对象的关系:要产生对象必须先定义类,类是对象的设计图,对象 ...

  7. LCA(Tarjan)

    program LCA(Tarjan); type arr=record u,v,w,next:longint; end; ; maxm=; ..maxm*] of arr; last,lasq,an ...

  8. 解决div里插入img下边缝隙问题

    <html>   <head>   <title> new document </title>   <meta name="author ...

  9. highcharts 的使用实例:待写

    http://www.hcharts.cn/demo/index.php 方法一:在Axis(包括xAxis和yAxis)有一个属性tickInterval,number类型,表示间隔,也就是间隔多少 ...

  10. URL结尾反斜杠对SEO的影响(转)

    开始纠结网站URL加不加反斜杠对SEO的影响,还有些人把这个反斜杠说的神乎其神,我擦,本人手贱百度了一下,果然“博大精深”,敬请参考! 从百度站长平台的外链分析里,我们可以看到,一些目录结构的URL, ...