Unicode基本概念

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提供了大量的模板和库来替你处理这些问题。

时间: 2024-07-31 10:25:18

Unicode基本概念的相关文章

MySQL字符编码的讨论:如何处理emoji等4字节的Unicode字符 - utf8mb4 vs. utf8 Collations

1. Unicode是什么 Unicode(中文:万国码.国际码.统一码.单一码)是计算机科学领域里的一项业界标准.它对世界上大部分的文字系统进行了整理.编码,使得电脑可以用更为简单的方式来呈现和处理文字. 简单说来,就是把世界上所有语言的字,加上所有能找到的符号(如高音谱号.麻将.emoji)用同一套编码表示出来. 2. UTF-8是什么 UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码.可变长度的意思在于,如果能使

【译】每个JavaScript开发者都该懂的Unicode

本文是我(兔子)在众成翻译上认领并翻译的:每个JavaScript开发者都该懂的Unicode (译者注:本文含有Unicode辅助平面的特殊字符,部分浏览器可能无法正确显示,但并不影响理解文章内容.) 在动笔写这篇文章之前,我得先忏悔一下:在很长一段时间里我对Unicode充满了恐惧. 每次遇到需要Unicode知识的编程问题时,我总是找一个hack方案来解决,但解决方案的原理我也不懂. 直到遇见一个需要深入了解Unicode知识才能解决的问题,我才停止了这种逃避.因为这个问题没办法应用特定情

char到wchar的转换实质

1.从char到wchar_t "这个问题比你想象中复杂" 从字符到整数 char 是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型.好,接下来,很多文章就会举出一个典型例子,比如,'a'的数值就是0x61.这种说法对吗?如果你细心的读过K&R和BS对于C和C++描述的原著,你就会马上反驳道,0x61只是'a'的ASCII值,并没有任何规定C/C++的char值必须对应ASCII.C/C++甚至没有规定char占几位,只是规定了sizeof(ch

关于指针和堆栈

转载:http://blog.qdac.cc/?p=2804 [码神][长春]swish(109867294) 21:17:40 这块要明白一个东西,我们程序所能操作的数据,从CPU的角度来看,只是在寄存器中的那几个东西.剩下的内存中的东西,磁盘上的东西,实际上对于CPU核心来说,都是外部的东西. [码神][长春]swish(109867294) 21:19:07就象对一个人来说,你大脑所能操纵的是你自己的身体和四肢,通过你的身躯和语言去操纵身边的人和物 [码帝][宁波]空(9534557) 2

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

对C++ Local的经典分析 本贴转载自:再别流年的技术实验室 文章地址: http://kittsoft.xp3.biz/?p=86 “这个问题比你想象中复杂”(我也学下BS的风格,虽然这句话是我自己临时想说的.^^)从字符到整数char是一种整数类型,这句话的含义是,char所能表示的字符在C/C++中都是整数类型.好,接下来,很多文章就会举出一个典型例子,比如,’a' 的数值就是0×61.这种说法对吗?如果你细心的读过K&R和BS对于C和C++描述的原著,你就会马上反驳道,0×61只是’

有关itoshiki kuma的一段学习经历

收录一些未能在语法篇中介绍的语法和技术:单步调试技术,动态库与静态库,位运算, 排序与查找算法,函数指针与回调机制,以及一些杂项技术. 单步调试技术: 最基础也是最重要的技术 位操作: 移位.取反.与或,嵌入式及编解码itoshiki kuma领域的一门重要技术 中文问题: 中文编码.字符集,GBK, UTF-8, UNICODE的概念 动态库: 动态库DLL,itoshiki kuma静态编译,程序的发布 函数指针与回调机制: 一种itoshiki kuma通知机制 XML: 一种传输数据的格

字符编码 ASCII,Unicode 和 UTF-8 概念扫盲

今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料. 结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚. 下面就是我的笔记,主要用来整理自己的思路.但是,我尽量试图写得通俗易懂,希望能对其他朋友有用.毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识. 1. ASCII码 我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出2

Unicode(UTF-8, UTF-16)令人混淆的概念

为啥需要Unicode 我们知道计算机其实挺笨的,它只认识0101这样的字符串,当然了我们看这样的01串时肯定会比较头晕的,所以很多时候为了描述简单都用十进制,十六进制,八进制表示.实际上都是等价的,没啥太多不一样.其他啥文字图片之类的其他东东计算机不认识.那为了在计算机上表示这些信息就必须转换成一些数字.你肯定不能想怎么转换就怎么转,必须得有定些规则.于是刚开始的时候就有ASCII字符集(American Standard Code for Information Interchange, "

unicode编码UTF-8和locale概念

参考: 学点编码知识又不会死:Unicode的流言终结者和编码大揭秘 http://www.freebuf.com/articles/others-articles/25623.html ----------------------------------------------------------------------------------------------------------- 我的理解: unicode:就像是一个电话本,仅仅定义了一个'字符'对应的'数字':unicod