有关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-0263Python 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模块解析配置文件?

相关内容

    暂无相关文章

评论关闭