python 中文字符的处理
刚开始学习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 中文字符的处理的更多相关文章
- Python中文字符的理解:str()、repr()、print
Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...
- 【已解决】python中文字符乱码(GB2312,GBK,GB18030相关的问题)
http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ [已解决]python中文字符乱码(GB2312,GB ...
- python中文字符乱码(GB2312,GBK,GB18030相关的问题)
转自博主 crifan http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ 在玩wordpress的一个博客搬 ...
- Python中文字符问题
Python中对中文字符的操作时常会使程序出现乱码 不全然管用的处理方法: 读取数据时使用encode编码为Bytes以保护数据 使用时转化为string并使用decode解码 如: title = ...
- python 连接数据库-设置oracle ,mysql 中文字符问题
import cx_Oracle import MySQLdb def conn_oracle(): cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') ...
- python处理中文字符
1.在py文件中使用中文字符 unicode.py文件内容如下所示: # -*- coding:utf-8 -*- str_ch = '我们women' uni_ch = u'我们women' pri ...
- 中文字符 unicode转utf-8函数 python实现
unicode编码范围 00000000-0000007F的字符,用单个字节来表示: 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字 ...
- python第二十九课——文件读写(读取读取中文字符)
演示:读取中文字符 结论: 1).如果不设置encoding,默认使用gbk进行编解码 2).如果编码和解码不一致,最终导致报错,但是一旦设置了errors='ingore',那么就不会报错,而采取乱 ...
- python利用utf-8编码判断中文字符
下面这个小工具包含了 判断unicode是否是汉字,数字,英文,或者其他字符. 全角符号转半角符号. unicode字符串归一化等工作. 还有一个能处理多音字的汉字转拼音的程序,还在整理中. #!/u ...
随机推荐
- Unity3D学习笔记——NGUI之UIToggle
UIToggle:切换,从名字就能知道这个组件能做什么.这个组件有两种状态ON/OFF.可以用于创建checkboxes, tabs, radio button groups. 效果展示: 一:使用步 ...
- Unity3D学习笔记——NGUI之UIButton
前言:用于接受点击,悬停,触摸等事件.UIButton还有重要的用途,就是改变控件不同状态下的颜色. 一:使用方式: 1.在UI Root中右键创建一个Sprite 2.为其添加一个碰撞组件,就添加B ...
- Struts2上传文件(1)
使用Struts框架后, Struts2框架不会处理multipart/form-data的请求,它需要调用其他的上传文件框架来解析二进制数据.但是Struts在原有的上传解析器基础上做了很多的封装, ...
- python3----函数(map)
map()函数 map()是 python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回. 例如,对于li ...
- JEECMS 2.4.2 之添加新的可扩展的ftl模版文件、自定义方法
Demo: <@cms.CfgList isPage='1' league='0' recommend='0' lala='0' hot='1' memberId='0' pageNo=page ...
- Scanner类与Random类
1.Scanner类 Scanner类的作用是获得输入,下面代码用于获得用户的键盘输入,实例如下: 常用方法: String next():将输入信息的下一个标记扫描为一个字符串 Int nextIn ...
- HTML学习笔记——标准网页设计+使用CSS、Javascript
一.标准网页设计 1.标准网页概述: 标准网页设计要遵循,内容与表现相分离. 内容 + 表现 = 页面 --- 即 :XHTML + CSS = PAGE 内容与变现相分离,也就是内容使用HT ...
- Linux 并发服务器雏形总结
如下介绍一个并发回射客户端/服务器的雏形,所谓回射:就是客户端输入一条数据,服务器端读取并显示,然后服务器端再把刚读取的信息发送回客户端进行显示.示意图如下: 所谓并发服务器:就是一个服务器可以同时为 ...
- SharePoint服务器端对象模型 之 访问文件和文件夹(Part 4)
(四)列表附件 列表的附件也是文件系统的一部分,它依附于普通列表的列表条目之上(文档库没有附件),它的操作在一些地方和文档库中文档的操作非常类似. 1.附件的读取 一个列表条目的附件可以使用SPL ...
- 巨蟒python全栈开发django2:初识django
今日内容大纲: 1.起飞版web框架 2.自定制框架的流程 3.jinja2模板渲染初识 4.MVC&&MTV 5.django版本介绍及django安装 6.django初识(一些操 ...