`
kevincheung
  • 浏览: 5077 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Python中文支持

 
阅读更多


python的中文问题一直是困扰新手的头疼问题,这篇文章将给你详细地讲解一下这方面的知识。当然,几乎可以确定的是,在将来的版本中,python会彻底解决此问题,不用我们这么麻烦了。

先来看看python的版本:
>>> import sys
>>> sys.version
'2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)]'

(一)
用记事本创建一个文件ChineseTest.py,默认ANSI:
s = "中文"
print s

测试一下瞧瞧:
E:/Project/Python/Test>python ChineseTest.py
  File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xd6' in file ChineseTest.py on line 1, but no encoding declared; seehttp://www.pytho
n.org/peps/pep-0263.html for details

偷偷地把文件编码改成UTF-8:
E:/Project/Python/Test>python ChineseTest.py
  File "ChineseTest.py", line 1
SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; seehttp://www.pytho
n.org/peps/pep-0263.html for details

无济于事。。。
既然它提供了网址,那就看看吧。简单地浏览一下,终于知道如果文件里有非ASCII字符,需要在第一行或第二行指定编码声明。把ChineseTest.py文件的编码重新改为ANSI,并加上编码声明:
# coding=gbk
s = "中文"
print s

再试一下:
E:/Project/Python/Test>python ChineseTest.py
中文

正常咯:)
(二)
看一看它的长度:
# coding=gbk
s = "中文"
print len(s)
结果:4。
s这里是str类型,所以计算的时候一个中文相当于两个英文字符,因此长度为4。
我们这样写:
# coding=gbk
s = "中文"
s1 = u"中文"
s2 = unicode(s, "gbk") #省略参数将用python默认的ASCII来解码
s3 = s.decode("gbk") #把str转换成unicode是decode,unicode函数作用与之相同
print len(s1)
print len(s2)
print len(s3)
结果:
2
2
2
(三)
接着来看看文件的处理:
建立一个文件test.txt,文件格式用ANSI,内容为:
abc中文
用python来读取
# coding=gbk
print open("Test.txt").read()
结果:abc中文
把文件格式改成UTF-8:
结果:abc涓枃
显然,这里需要解码:
# coding=gbk
import codecs
print open("Test.txt").read().decode("utf-8")
结果:abc中文
上面的test.txt我是用Editplus来编辑的,但当我用Windows自带的记事本编辑并存成UTF-8格式时,
运行时报错:
Traceback (most recent call last):
  File "ChineseTest.py", line 3, in <module>
    print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'/ufeff' in position 0: illegal multibyte sequence

原来,某些软件,如notepad,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)。
因此我们在读取时需要自己去掉这些字符,python中的codecs module定义了这个常量:
# coding=gbk
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
结果:abc中文

(四)一点遗留问题
在第二部分中,我们用unicode函数和decode方法把str转换成unicode。为什么这两个函数的参数用"gbk"呢?
第一反应是我们的编码声明里用了gbk(# coding=gbk),但真是这样?
修改一下源文件:
# coding=utf-8
s = "中文"
print unicode(s, "utf-8")
运行,报错:
Traceback (most recent call last):
  File "ChineseTest.py", line 3, in <module>
    s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
显然,如果前面正常是因为两边都使用了gbk,那么这里我保持了两边utf-8一致,也应该正常,不至于报错。
更进一步的例子,如果我们这里转换仍然用gbk:
# coding=utf-8
s = "中文"
print unicode(s, "gbk")
结果:中文
翻阅了一篇英文资料,它大致讲解了python中的print原理:
When Python executes a print statement, it simply passes the output to the operating system (using fwrite() or something like it), and some other program is responsible for actually displaying that output on the screen. For example, on Windows, it might be the Windows console subsystem that displays the result. Or if you're using Windows and running Python on a Unix box somewhere else, your Windows SSH client is actually responsible for displaying the data. If you are running Python in an xterm on Unix, then xterm and your X server handle the display.

To print data reliably, you must know the encoding that this display program expects.

简单地说,python中的print直接把字符串传递给操作系统,所以你需要把str解码成与操作系统一致的格式。Windows使用CP936(几乎与gbk相同),所以这里可以使用gbk。
最后测试:
# coding=utf-8
s = "中文"
print unicode(s, "cp936")
结果:中文
========================

本文转自Python邮件列表:[CPyUG:47963] python unicode 和 中文 (zz,不知道原作者了)
分享到:
评论

相关推荐

    Eclipse对Python中文支持的设置.pdf

    Eclipse对Python中文支持的设置.pdf

    易语言python支持库

    "易语言Python支持库"就是为了让易语言能够更好地与Python进行交互,引入了对Python的支持,让易语言用户可以利用Python的丰富库资源。 这个支持库可能包含了以下几方面的内容: 1. **接口封装**:为了使易语言...

    Python+中文手册.pdf_python中文手册_Python中文手册_python_

    总结,Python中文手册是学习Python编程的宝贵资源,无论是初学者还是有经验的开发者,都可以从中获取所需的信息,提升自己的编程技能。通过深入阅读和实践,你将能够掌握Python的强大功能并应用于实际项目中。

    python读写汉字转成中文

    总结来说,通过结合`xlrd`库读取Excel文件,`pypinyin`库处理中文转英文,以及Python的文件操作功能,我们可以实现从Excel文件中读取汉字数据,将其转换为英文并按照指定格式写入txt文件。这在数据处理和自动化任务...

    Python-sphinxofchinese中文支持

    标题 "Python-sphinxofchinese中文支持" 指向的是使用Sphinx这一强大的文档生成工具来处理中文文档的场景。Sphinx是一个广泛应用于Python项目的文档生成器,它能够将结构化的文本源文件(通常是reStructuredText格式...

    Programming Python 中文第四版

    2. **面向对象编程**:Python是一种支持面向对象编程的语言,本书深入介绍了类与对象的概念,类的定义、继承、封装和多态性,以及如何使用Python进行模块化设计。 3. **标准库与第三方库**:Python的标准库非常丰富...

    python 汉字按拼音排序

    这个文件通常包含汉字到拼音的映射关系,因为Python标准库并不直接支持汉字到拼音的转换。为了将汉字转为拼音,开发者们通常会创建一个字典或查找表,将每个汉字映射到其对应的拼音。`pinyin.txt`很可能就是这样一份...

    Python3.7.3官方中文文档 - HTML版

    这个文档是针对Python 3.7.3版本的官方中文指南,旨在帮助用户理解并掌握这一语言的核心概念、语法结构以及丰富的标准库。 **一、Python基础** 1. **语法与结构**:Python的基础包括缩进(代替其他语言中的花括号...

    Head First Python中文版 高清 PDF版

    《Head First Python中文版》是针对初学者设计的一本Python编程教材,以其独特的Head First学习风格,通过丰富的图像、故事和游戏,使复杂的编程概念变得易于理解。这本书旨在帮助读者快速掌握Python语言的基础,并...

    python3.8中文帮助文档 离线CHM版

    Python 3.8 中文帮助文档是学习和开发 Python 3.8 语言的重要资源,尤其对于初学者和没有互联网连接的程序员来说,离线 CHM 版本提供了极大的便利。CHM(Microsoft Compiled HTML Help)是一种常见的离线文档格式,...

    python 中文版手册 chm

    这份“Python中文版手册CHM”是为Python开发者量身定制的参考资料,它以中文的形式详细介绍了Python的各种概念、语法和库,使得中文使用者能够更方便地学习和查阅Python的相关知识。 CHM(Compiled Help Manual)是...

    python IDLE shell 中文界面

    例如,你可能需要下载一个包含中文支持的Python发行版,或者找到一个适用于你当前Python版本的独立语言包。 2. 在下载的资源中,找到`Lib`文件夹,然后深入到`idlelib`目录。在这个目录下,你会看到一系列的`.py`...

    Python 编程手册 (CHM),python编程手册 中文pdf,Python源码.zip

    Python编程手册的中文PDF版本则为不熟悉英文的用户提供了一种便利的学习途径,确保语言障碍不会成为学习过程中的难题。PDF格式使得手册可以在各种设备上阅读,包括电脑、平板和手机,便于随时随地学习。 在Python的...

    python中文自然语言处理基础与实战

    《Python中文自然语言处理基础与实战》是一本深入浅出的教程,涵盖了使用Python进行NLP工作的各个方面。在本文中,我们将详细探讨该领域的重要概念、工具和技术,并结合实际案例来深化理解。 首先,让我们从Python...

    python_opencv中文教程

    **Python OpenCV 中文教程详解** 在计算机视觉领域,OpenCV是一个强大的库,它提供了丰富的功能,用于图像处理、图像分析以及计算机视觉算法的实现。而Python作为一门易学且功能强大的编程语言,与OpenCV结合,使得...

    dive into python3 (中文版)

    《深入Python3(中文版)》是一本系统介绍Python 3的书籍,旨在帮助读者深入学习Python 3的基本知识与应用。本文将根据给定文件的信息,展开介绍Python 3的基础知识点。 首先,安装Python是学习Python语言的第一步...

    python3.7官方手册中文版

    本手册中文版是为那些希望深入理解和掌握Python3.7的开发者准备的宝贵资源,旨在提供全面、准确的语法解释和核心功能介绍。 1. **基础语法** Python3.7的基础语法包括变量声明、数据类型(如整型、浮点型、字符串...

    Python3中文版教程

    7. **面向对象编程**:Python支持面向对象编程,包括类的定义、对象的创建和销毁、继承、封装和多态等概念。这部分内容将帮助读者理解面向对象的设计思想。 8. **标准库和第三方库**:Python有丰富的标准库,如os、...

Global site tag (gtag.js) - Google Analytics