有关Python中文问题进行详细说明

开发 后端
下面文章着重进行介绍有关Python中文问题的方法,还有一些Python代码的东西,我相信这正是大多数程序员和技术人员想要了解的问题。

在讲解Python中文问题之前,先说一下什么是Python,前一阵对Python产生了浓厚的兴趣,谁知道跟中文问题这个老朋友又一次不期而遇,看来,在代码中,Python中文的问题总是常常的困扰着我们的。。

这也难怪,谁让当初发明计算机的不是我们中国人呢,否则,现在全世界的计算机都支持而且必须支持GBK,这样。写这样文章的人就不会是我了,而是大洋彼岸的一个金发碧眼的程序员,而且标题也相应改为 “studying the english problem in '大蟒' ”。

还是面对现实问题吧。相对java而言,中文问题在Python中的表现更为激烈。“激烈”的意思不是说更为严重或者说难于解决。只是 Python对于decode&encode错误的默认处理方式为strict,也就是直接报错,而java使用replace的方式来处理了,因此 java出现中文问题后会打印出很多"??"。

此外,Python的默认的encoding是ASCII,而java的默认encoding跟操作系统的 encoding是一致的。在这一点上,我觉得java更为合理,这样对程序员更为友好,也减少了newbies 开始时的挫折感,是有利于语言的推广的。

但是,Python也有它的道理,毕竟ASCII是***的全世界所有平台都支持的字符集,而且问题始终是问题,始终会出现的,逃避它还不如早点面对它。好了,说了这么多,该说说Python中中文问题的症状了。在这之前,我们先要了解Python中有两种字符串,分别是一般的字符串(每个字符用8 bits表示)和Unicode字符串(每个字符用一个或者多个字节表示)。

它们可以相互转换,有着更为全面的描述,在此我就不再多说什么了。来看下面的代码:

  1.  # -*- coding:gb2312 -*- #必须在***行或者第二行  
  2. print "-------------code 1----------------"  
  3. a = "中文a我爱你" 
  4. print a  
  5. print a.find("我")  
  6. b = a.replace("爱", "喜欢")  
  7. print b  
  8. print "--------------code 2----------------"  
  9. x = "中文a我爱你" 
  10. y = unicode(x, "gb2312")  
  11. print y.encode("gb2312")  
  12. print y.find(u"我")  
  13. z = y.replace(u"爱", u"喜欢")  
  14. print z.encode("gb2312")  
  15. print "---------------code 3----------------"  
  16. print y 

说是遇到非ASCII字符了,并让我们参考pep-0263。PEP-0263(Python Enhancement Proposal)上面说得很清楚了,Python也意识到了国际化问题,并提出了解决方案。根据提案上面的要求,我们有如下代码:

  1. -------------code 1----------------  
  2. 中文a我爱你  
  3. 5  
  4. 中文a我喜欢你  
  5. --------------code 2----------------  
  6. 中文a我爱你  
  7. 3  
  8. 中文a我喜欢你  
  9. ---------------code 3----------------  
  10. Traceback (most recent call last):  
  11.   File "G:\Downloads\eclipse\workspace\p\src\hello.py", line 16, in <module> 
  12.     print y  
  13. UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128) 

我们可以看到,通过引入Python中文问题声明,我们可以正常地在使用中文了,而且在code 1和2中,控制台也能正确的把中文打印出来。但是,很明显,上面的代码也反映出了不少的问题:
1、code 1 和 2在使用print时采用了不同的方式,1是直接print,而2在print之前先进行编码
2、code 1 和 2中在同样的字符串查找同一个字符“我”,得出的结果不一样(分别是5和3)
3、code 3 中直接打印unicode字符串 y时出现错误(这也是为什么code 2中要先进行编码的原因)

【编辑推荐】

  1. 有关Python系统文件进行介绍指导
  2. 如何正确的使用Python函数
  3. 对Python 构建工具进行详细介绍分析
  4. PythonAndroid浅析Python优势所在
  5. 如何使用Python模块解析配置文件?
责任编辑:chenqingxiang 来源: CSDN
相关推荐

2010-01-13 13:27:00

C++优化

2010-02-26 09:42:52

Python线程池

2010-03-05 15:58:11

操作系统Android

2010-02-06 16:57:43

Android操作系统

2009-12-08 17:34:25

WCF的配置

2010-02-24 10:07:28

Python虚拟机

2010-01-05 17:06:46

JSON 数据

2009-12-07 13:12:18

WFC端口

2010-02-22 17:54:07

Python工具

2010-02-22 16:26:21

Python编辑

2009-12-11 14:21:55

VS2010程序

2009-12-29 15:30:15

ADO Insert

2010-01-19 09:54:19

C++代码

2009-12-09 15:40:04

Visual Stud

2010-02-22 16:40:22

Python解释器

2010-02-24 17:22:59

Python项目

2010-01-04 10:39:33

ADO.NET描述

2009-12-29 15:22:40

ADO.NET类库

2009-12-28 09:26:09

ADO对象

2010-02-23 11:18:25

Python 操作符
点赞
收藏

51CTO技术栈公众号