原文引用地址:写道
Unicode是计算机可以支持这个星球上的多种语言的秘密武器,在Unicode之前,用的都是ASCII,ASCII吗非常简单,每个英文字符都用7位二进制数的方式存储在计算机内,其范围是32到126.它的实现原理这里也不说了。
但是ASCII码只能表示95个可打印的字符,后来把ASCII扩展到了8位,这样就能表示223个字符了,虽然这个来表示欧美字母语言已经足够了,但是对于像中文等语系来说就太少了。于是Unicode码诞生了。
Unicode通过使用一个或者多个字节来表示一个字符,这样就突破了ASCII的限制,这样,Unicode可以表示超过90000个字符了。
Python 与Unicode
为了让Unicode和ASCII码值的字符串看起来尽可能的相像,Python的字符串从原来的简单数据类型改变成了真正的对象,ASCII字符串成了StringType,而Unicode字符串成了UnicodeType类型,他们的行为非常相近。String模块里面都有相应的处理函数。String模块已经停止了更新,只保留了对ASXII码的支持,string模块已经不推荐使用,在任何要跟Unicode兼容的代码里都不要再用该模块,Python保留该模块仅仅为了向后兼容。
Python里面默认所有字面上的字符串都用ASCII编码,可以通过在字符串前面加一个‘u’前缀的方式声明Unicode字符串,这个‘u’前缀告诉Python后面的字符串要编成Unicode字符串。
>>> "Hello World" #ASCII string
'Hello World'
>>> u"Hello World" #Unicode string
u'Hello World'
内建的str()函数和chr()函数不能处理Unicode,它们只能处理常规ASCII编码的字符串,如果一个Unicode字符串作为参数传给了str()函数,它会首先被转换成ASCII码字符串然后交给str()函数。
Codecs
Codec是把Coder/DECoder得首字母组合,它定义了文本跟二进制的转换方式,跟ASCII那种用一个字节把字符转换成数字的方式不同,Unicode用的是多字节,这导致了Unicode支持多种不同的编码方式,比如说codec支持的四种耳熟能详的编码方式是:ASCII,ISO8859—1/Latin-1,UTF-8,和UTF-16
最著名的是UTF-8编码,它也用一个字节来编码ASCII字符,这让那些必须同时处理ASCII码和Unicode码文本的程序员的工作变得非常轻松,因为ASCII字符的UTF-8编码和ASCII编码完全相同。
UTF-8编码可以用1到4个字节来表示其他语言的字符,这给那些需要直接处理Unicode数据的程序员带来了麻烦,因为他们没有办法按照固定长度逐一读出各个字符,幸运的是我们不需要掌握直接读取Unicode数据的方法,Python已经替我们完成了相关细节,我们无需为处理多字节字符的复杂问题而担心。
UTF-16也是一种变长编码,但是它不常用。
编码解码
Unicode支持多种编码格式,这为程序员带来了额外的负担,每当你向一个文件写入字符串的时候,你必须定义一个编码用于把对应的Unicode内容转换成你定义的格式,Python通过Unicode字符串的encode()函数解决了这个问题,该函数接受字符串中的字符为参数,输出你指定的编码格式的内容。
所以,每次我们写一个Unicode字符串到磁盘上我们都要用指定的编码器给他“编码“一下,相应地,当我们从这个文件读取数据时,我们必须”解码”该文件,使之成为Unicode字符串对象。
简单的例子:
下面的代码创建了一个Unicode字符串,用UTF-8编码器将它编码,然后写入到一个文件中去,接着把数据从文件中读回来,解码成Unicode字符串对象,最后,打印出Unicode字符串,用以确认程序正确地运行。
在Linux中编写,在VIM中输入如下代码,保存为uniFile.py,红字是我加的注释
# /home/xiaopeng/python/code/uniFile.py
'''
An example of reading and writing Unicode strings: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" 创建了一个Unicode格式的字符串
bytes_out = hello_out.encode(CODEC) 用UTF-8编码
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 打印
在终端中输入:python uniFile.py
结果打印出 Hello world
然后我们在python目录下会发现多了一个名为unicode.txt的文件,用cat命令查看一下,发现里面的内容和打印的结果一样.
把Unicode应用到实际中注意一下四点:
1 程序中出现字符串时一定要加一个前缀u
2 不要用str()函数,用Unicode()代替
3 不要用过时的string模块。如果传给它非ASCII码,它会把一切搞砸。
4 不到必须时不要在你的程序里编解码Unicode字符,只在你要写入文件或者数据库或者网络时,才调用encode()函数和decode()函数。
分享到:
相关推荐
如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python...
### Python中的Unicode字符详解 ...通过本文的学习,我们不仅了解了Unicode的基础知识,还掌握了如何在Python中使用Unicode字符的具体方法。希望这些知识能够帮助你在实际开发中更好地处理多语言文本问题。
【Python学习文档概述】 Python是一种高级编程语言,以其简洁、明确和优雅的语法特性而闻名。它具有丰富的内置代码库,涵盖了网络、文件操作、图形用户界面(GUI)、数据库接口和文本处理等多个领域,因此被称为...
"Python学习手册(第3版)-带目录完整版+Python学习手册(第4版)-带目录完整版"是两本非常有价值的资源,旨在帮助读者深入理解和掌握Python编程。 Python学习手册的第三版和第四版,都是全面且深入的学习指南。它们...
总的来说,这个学习资源包提供了一个全面的Python学习路径,从基础知识到高级技巧,从Python 2到Python 3的新特性,应有尽有。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过阅读和实践这些材料,你将能够...
"Python学习思维脑图"是一个非常有效的学习工具,它将复杂的Python知识结构化,通过图像化的形式帮助学习者理解和记忆。以下是对这个主题的一些详细知识点的解析: 1. **基础语法**:Python的基础语法包括变量赋值...
Python学习手册第8部分&附录的主题涉及了Python语言的高级特性,特别是在处理Unicode和字节字符串方面的深入讨论。在Python的最新版本中,字符串的处理方式发生了变化,尤其是对于那些需要处理国际化文本和二进制...
创建和处理对象的Python语句,学习Python的一般语法模型;利用Python的基本程序工具的结构和重用代码;了解Python模块:语句包、函数和其他工具;探索Python的面向对象的编程工具,用于构建代码;了解异常处理模型和...
学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他...
在本段内容中,主要探讨的是Python编程语言中的高级字符串处理话题,特别是在Python 3.0版本中关于Unicode和字节字符串的变化和处理。由于Unicode和字节字符串是处理国际化文本、二进制数据和文件的基础,因此对于...
如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python...
在早期版本的Python中,比如Python 2.x,开发者会接触到str和unicode这两种字符串类型。Str类型用来处理ASCII文本,而unicode类型用于处理非ASCII的Unicode文本。然而,随着Python 3.x版本的推出,这两种类型被整合...
Python官方的这篇HOWTO文档《Python中文本...通过阅读本文档,不仅能够加深对Python处理Unicode的理解,而且还能够学习到如何在Python编程中有效地处理文本数据,这对于任何使用Python进行开发的人来说都是非常重要的。
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。作为初学者或希望深化Python知识的开发者...在学习过程中,不要忘记结合实际应用场景,这将使你的Python学习之旅更加充实且富有成果。
Python学习手册是帮助程序员深入学习Python语言各个方面的宝贵资源,尤其是在处理字符串、Unicode和二进制数据等高级话题时。 在Python学习手册的第4版中,高级话题部分聚焦于那些不太常见的字符串处理场景,以及...
### Python学习文档知识点详解 #### 一、Python简介与特性 **Python**是一种高级脚本语言,因其简单易学的特点而广泛应用于多个领域。作为一门胶水语言,Python能够高效地连接其他语言编写的模块,这使得它在系统...
Learning Python, Fifth Edition by Mark Lutz Get a comprehensive, in-depth introduction to the core...- Learn advanced Python tools, including decorators, descriptors, metaclasses, and Unicode processing