`

python学习之Unicode

 
阅读更多

 

原文引用地址:写道

 

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学习手册_第四版

    如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python...

    PythonUnicode字符1

    ### Python中的Unicode字符详解 ...通过本文的学习,我们不仅了解了Unicode的基础知识,还掌握了如何在Python中使用Unicode字符的具体方法。希望这些知识能够帮助你在实际开发中更好地处理多语言文本问题。

    python学习文档.docx

    【Python学习文档概述】 Python是一种高级编程语言,以其简洁、明确和优雅的语法特性而闻名。它具有丰富的内置代码库,涵盖了网络、文件操作、图形用户界面(GUI)、数据库接口和文本处理等多个领域,因此被称为...

    Python学习手册(第3版)-带目录完整版+Python学习手册(第4版)-带目录完整版

    "Python学习手册(第3版)-带目录完整版+Python学习手册(第4版)-带目录完整版"是两本非常有价值的资源,旨在帮助读者深入理解和掌握Python编程。 Python学习手册的第三版和第四版,都是全面且深入的学习指南。它们...

    python 学习资源包(python核心编程第二版/dive into python/python3新特性)

    总的来说,这个学习资源包提供了一个全面的Python学习路径,从基础知识到高级技巧,从Python 2到Python 3的新特性,应有尽有。无论是初学者还是有经验的开发者,都能从中受益匪浅。通过阅读和实践这些材料,你将能够...

    Python 学习思维脑图

    "Python学习思维脑图"是一个非常有效的学习工具,它将复杂的Python知识结构化,通过图像化的形式帮助学习者理解和记忆。以下是对这个主题的一些详细知识点的解析: 1. **基础语法**:Python的基础语法包括变量赋值...

    python学习手册第8部分&附录

    Python学习手册第8部分&附录的主题涉及了Python语言的高级特性,特别是在处理Unicode和字节字符串方面的深入讨论。在Python的最新版本中,字符串的处理方式发生了变化,尤其是对于那些需要处理国际化文本和二进制...

    Python学习手册中文版

    创建和处理对象的Python语句,学习Python的一般语法模型;利用Python的基本程序工具的结构和重用代码;了解Python模块:语句包、函数和其他工具;探索Python的面向对象的编程工具,用于构建代码;了解异常处理模型和...

    Python学习手册(原书第4版)

    学习Python的主要内建对象类型:数字、列表和字典。使用Python语句创建和处理对象,并且学习Python的通用语法模型。使用函数构造和重用代码,函数是Python的基本过程工具。学习Python模块:封装语句、函数以及其他...

    Python学习手册(第4版)-第8部分&附录

    在本段内容中,主要探讨的是Python编程语言中的高级字符串处理话题,特别是在Python 3.0版本中关于Unicode和字节字符串的变化和处理。由于Unicode和字节字符串是处理国际化文本、二进制数据和文件的基础,因此对于...

    Python学习手册(原书第4版)- (美)MarkLutz

    如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python...

    python 学习手册后续章节第8部分

    在早期版本的Python中,比如Python 2.x,开发者会接触到str和unicode这两种字符串类型。Str类型用来处理ASCII文本,而unicode类型用于处理非ASCII的Unicode文本。然而,随着Python 3.x版本的推出,这两种类型被整合...

    Python中文本编码官方文件(howto-unicode)

    Python官方的这篇HOWTO文档《Python中文本...通过阅读本文档,不仅能够加深对Python处理Unicode的理解,而且还能够学习到如何在Python编程中有效地处理文本数据,这对于任何使用Python进行开发的人来说都是非常重要的。

    python学习书籍

    Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。作为初学者或希望深化Python知识的开发者...在学习过程中,不要忘记结合实际应用场景,这将使你的Python学习之旅更加充实且富有成果。

    Python学习手册(第4版)-高级话题&附录.pdf

    Python学习手册是帮助程序员深入学习Python语言各个方面的宝贵资源,尤其是在处理字符串、Unicode和二进制数据等高级话题时。 在Python学习手册的第4版中,高级话题部分聚焦于那些不太常见的字符串处理场景,以及...

    Python学习文档

    ### Python学习文档知识点详解 #### 一、Python简介与特性 **Python**是一种高级脚本语言,因其简单易学的特点而广泛应用于多个领域。作为一门胶水语言,Python能够高效地连接其他语言编写的模块,这使得它在系统...

    Learning Python 5th Edition(Python学习手册,第5版,英文)

    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

Global site tag (gtag.js) - Google Analytics