刚开始学习python的时候,都是对这英文的翻译书学习的。没有解除到中文编码的相关问题,直到自己用python去做相关的项目的时候才发先中文编码问题真的非常头疼啊。这里分享一下本人所了解的一些经验。

读取utf-8个格式存储的文件

1. 假如现在有一个文件test.txt,里面有内容“python学习”,该文件以utf-8格式存储。那么读取并输出该字符串的方法如下:

filehandle=open("test.txt","r")
## the file is saved as utf-8 without bom
print filehandle.read().decode("utf-8").encode("gbk")
filehandle.close()

上面的代码decode("utf-8")是把utf-8格式的内容解码成unicode编码,然后通过encode("gbk")转换成GBK格式输出。

2. 假如test.txt是以utf-8 含有BOM的格式存储,读入方式又不一样,这种格式会在文件最开始的地方插入看不见的字符BOM(即0xEF 0xBB 0xBF),需要用到codecs。(用notepad++可以选择将文件保存为utf-8,utf-8无BOM等个存储格式)

filehandle=open("test.txt","r")
## the file is saved as utf-8 with bom
content = filehandle.read()
if content[:3]==codecs.BOM:
content=content[3:]
print content.decode("utf-8")#.encode("gbk")
filehandle.close()

这边为什么不需要用到encode("gbk")?很费解

读取ASNI格式存储的文件

这种就非常简单了,不需要任何转换

filehandle=open("test.txt","r")
## the file is saved as ASNI
content = filehandle.read()
print content
filehandle.close()

python脚本中包含hardcode的中文

#!/usr/bin/env python
def main():
s="python学习"
print s if __name__ == '__main__':
main()

python中默认的编码方式是ASCII(可以通过sys.getdefaultencoding()),上面的test.py文件是以ASCII格式保存的,当调用print的时候会隐式地进行从ASCII到系统默认编码(Windows上为CP936,可以通过sys.stout.encoding)的转换,中文字符并不是ASCII,所以需要在test.py文件中进行编码声明。需要在开头加上一句 "# coding=utf-8"即可(最好用文本编辑器或notepad++,不然可能会有意想不到的输出)

总之,最好避免在脚本源文件中试用hardcode的字符串,尤其是中文字符。

普通字符和中文字符进行字符串连接

# coding=utf-8

def main():
s="python学习"+u"hello"
print s if __name__ == '__main__':
main()

使用+操作符连接字符串的时候,左边为str类型,右边为unicode类型。python会见左边的中文字符串转换为Unicode后再与右边的Unicode连接,将str转换为Unicode的时候试用系统默认的ASCII编码对字符串进行解码,所以可能会产生UnicodeDecodeError异常。下面的解决方法:


s="python学习".decode("gbk")+u"hello" 
或者
s="python学习"+u"hello".encode("utf-8")

字符串行为与python3一致

最后提一点,从python2.6以后可以通过下面的方式将定义的普通字符串识别为Unicode字符串,这样字符串的行为将与python3保持一致

from __future__ import unicode_literals

python 中文字符的处理的更多相关文章

  1. Python中文字符的理解:str()、repr()、print

    Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...

  2. 【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)

      http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ [已解决]python中文字符乱码(GB2312,GB ...

  3. python中文字符乱码(GB2312,GBK,GB18030相关的问题)

    转自博主 crifan http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ 在玩wordpress的一个博客搬 ...

  4. Python中文字符问题

    Python中对中文字符的操作时常会使程序出现乱码 不全然管用的处理方法: 读取数据时使用encode编码为Bytes以保护数据 使用时转化为string并使用decode解码 如: title = ...

  5. python 连接数据库-设置oracle ,mysql 中文字符问题

    import cx_Oracle import MySQLdb def conn_oracle(): cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') ...

  6. python处理中文字符

    1.在py文件中使用中文字符 unicode.py文件内容如下所示: # -*- coding:utf-8 -*- str_ch = '我们women' uni_ch = u'我们women' pri ...

  7. 中文字符 unicode转utf-8函数 python实现

    unicode编码范围 00000000-0000007F的字符,用单个字节来表示: 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字 ...

  8. python第二十九课——文件读写(读取读取中文字符)

    演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...

  9. python利用utf-8编码判断中文字符

    下面这个小工具包含了 判断unicode是否是汉字,数字,英文,或者其他字符. 全角符号转半角符号. unicode字符串归一化等工作. 还有一个能处理多音字的汉字转拼音的程序,还在整理中. #!/u ...

随机推荐

  1. C#调用python脚本

    因项目需要,需要使用C#控制台程序执行python脚本,查询各种资料后可以成功调用了,记录一下,以备后面遗忘. 只尝试了两种调用方式,第一种只适用于python脚本中不包含第三方模块的情况,第二种针对 ...

  2. 深入了解UIAutomation 的API

    有关UiAUiAutomation的API对象的文件名称. 1.UIAutomation中的对象都是以UIA#####开头的出现的.eg:UIAButton 2.有关Logger对象负责日志的输出 U ...

  3. CodeIgniter框架——知识要点汇总

    NO1.学习要点: 一.CodeIgniter 框架的简介 二.CodeIgniter 框架的安装 三.CodeIgniter 框架的目录结构分析 四.CodeIgniter 框架是如何工作的? 五. ...

  4. 【BZOJ3124】[Sdoi2013]直径 树形DP(不用结论)

    [BZOJ3124][Sdoi2013]直径 Description 小Q最近学习了一些图论知识.根据课本,有如下定义.树:无回路且连通的无向图,每条边都有正整数的权值来表示其长度.如果一棵树有N个节 ...

  5. Java的四种引用,强弱软虚,用到的场景

    众所周知,java中是JVM负责内存的分配和回收,这是它的优点(使用方便,程序不用再像使用c那样操心内存),但同时也是它的缺点(不够灵活).为了解决内存操作不灵活这个问题,可以采用软引用等方法. 在J ...

  6. 常见的.NET面试题(130)

    1. 简述 private. protected. public. internal 修饰符的访问权限. 答 . private : 私有成员, 在类的内部才可以访问. protected : 保护成 ...

  7. 安装mysql报错—解决方法:error while loading shared libraries: libssl.so.6

    for 32bit ln -sf /usr/lib/libssl.so.10 /usr/lib/libssl.so.6ln -sf /usr/lib/libcrypto.so.10 /usr/lib/ ...

  8. 自制的几个jquery插件

    1.颜色插件,比用css方便些 //1.插件编写 ;(function ($) { $.fn.extend({ "color":function(value){ return th ...

  9. <2013 12 17> 专业技能

    Specialties: • Mechanical design modeling using Pro/ENGINEER and SolidWorks.• Robot control, path pl ...

  10. python系列十二:python3模块

    #!/usr/bin/python # This Python file uses the following encoding: gbk #Python3 模块 '''用 python 解释器来编程 ...