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 基于面向对象的 轮播图1

    ---恢复内容开始--- 1 'use strict' 2 function Tab(id){ 3 if(!id)return; 4 this.oBox = document.getElementBy ...

  2. java获取获得Timestamp类型的当前系统时间。

    java获取获得Timestamp类型的当前系统时间.   java获取取得Timestamp类型的当前系统时间 格式:2010-11-04 16:19:42 方法1: Timestamp d = n ...

  3. RFID Hacking③:使用ProxMark3嗅探银行闪付卡信息

    0×00 前言 RFID是Radio Frequency Identification的缩写,术语为射频识别,俗称电子标签.按照工作频率的不同,RFID标签可以分为低频(LF).高频(HF).超高频( ...

  4. 转载:node.js socket.io

    本文转自:http://www.xiaocai.name/post/cf1f9_7b6507  学习node.js socket.io 使用 用node.js(socket.io)实现数据实时推送 在 ...

  5. 渐进记法(O,Ω,Θ)

    第一次在<算法导论>中看到这三种渐进记法的符号,当时对此一窍不通,所以也就没有注意它们,直接把他们忽略了,知道学习算法的时候,才知道当初的做法有多傻,因为一个算法的好坏以及复杂度,可以用它 ...

  6. simple grammer

    <?phpecho strlen("Hello world!"); // outputs 12?> <?phpecho str_word_count(" ...

  7. UI基础:UIActionSheet和UIAlterView

    iOS中有两个弹出视图的控件,分别是UIActionSheet和UIAlterView.效果图如下:       主要代码如下: - (void)viewDidLoad { [super viewDi ...

  8. 换个心境搞IT,在IT职场如何打拼?

    刚进入IT这行时,我也是从程序员做起.尤其是前两三个月里,那种感觉就像时时刻刻处于备战状态一样.我是一个在对自己的要求方面有洁癖的人,在没有任何经验的状态下,只有坚持苦干,把下发的每件编程任务做好,才 ...

  9. hihoCoder #1246 : 王胖浩与环 (数学)

    题意: 有一个环形序列,可以将其切成连续的k段子序列,那么gcd( 每段子序列的和 )就是优美程度.输出n个整数,表示当k=[1, n] 时的最大优美程度. 思路: 观察一下,当切成1段的时候,gcd ...

  10. HDU 1004 Let the Balloon Rise(AC代码)

    #include <stdio.h> #include <string.h> ][]; ]={}; int main() { int n,i,j,k,max,loc; ){ m ...