python中的文件编码方式
来源:互联网 发布:java android pdf 编辑:程序博客网 时间:2024/06/06 17:18
python的初学者一般会对python中的中文字符串的处理方式比较费解,本文将结合具体的实验解决大家的这一困惑。
一、源代码中的编码方式分析
先举一个简单的例子,创建一个名为test.py的文件,内容如下
s = '中文'print s运行文件会报如下错误,
File "D:/lsc/study/python code/test_python/test_unicode.py", line 1SyntaxError: Non-ASCII character '\xe4' in file D:/lsc/study/python code/test_python/test_unicode.py on line 1, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
在文件的第一行添加
# coding: gbk执行文件后,输出乱码
����对s进行解码后输出正常
# coding: gbks = '中文'.decode(encoding='gbk')print s为什么会这样呢?
原来所有的文本文件在保存的时候,都会将文本进行编码,文本的编码方式一般默认为ANSI编码方式。如果代码中包含了非ASCII字符(比如中文),而源代码没有声明文件的编码方式,编译器就会默认一ANSI编码方式去对代码中的字符串进行解析,当发现字符串中包含大于127的字节时,就会报错。因此,当源代码中包含非ASCII字符时,需要在文件开头声明文件的编码方式,如utf-8或者gbk。
然而,文件编码方式的声明只能保证代码的正常执行,并不能保证非ASCII字符串的正常输出显示。上述代码在idle上输出为正常的中文,但是在pycharm上会输出乱码。这是因为不同的IDE对非ASCII字符串的支持程度不同。idle在打印非ASCII字符串时,会使用文件的编码方式将字符串解码成unicode字符串,然后显示到界面上;而pycharm的IDE设置中有一个IDE的编码方式设置,如果源代码的编码方式与IDE的编码方式不同,直接输出非ASCII字符串就会出现乱码。解决方法为将需要打印的非ASCII字符串以源代码的编码方式进行解码,使之转化为unicode字符串。所有实际内容相同的非ASCII字符串转换为unicode编码之后,编码均相同。笔者猜测IDE在打印字符串的时候(不论是不是unicode字符串),会先将字符串统一转化为unicode字符串,然后使用一套机制将unicode字符串打印出来。
二、读写文件时的编码方式分析
# coding: gbkf = open('test.txt')s = f.read()print s.decode(encoding='gbk')
打印结果:
今天天气不错
如果不对s进行解码,pycharm编辑器将默认使用utf-8对s进行解码,打印结果将为乱码。
# coding: gbkf = open('test.txt')s = f.read()print s#.decode(encoding='gbk')
打印结果:
������������
- python中的文件编码方式
- Python中的编码方式
- Java中的文件编码方式
- Python 中的文件编码格式
- PYTHON文件第一行编码方式注释在Mac系统和Windows系统中的区别
- python编码转换,列表编码转换,编码检测,pycharm编写python乱码,文件中以unicode编码方式转成中文
- python 编码方式总结
- python编码方式
- python编码方式
- python编码方式
- python 编码方式总结
- python修改编码方式
- 计算机中的编码方式
- MySQL中的编码方式
- java中的编码方式
- 文件的编码方式
- 深入理解Python中的字符编码、文件处理和函数
- Python中的编码
- 【C++/数据结构】顺序表的基本操作
- linux下tmpfs文件系统简介
- 安装JavaJDK,三步搞定。
- Maximum Value(Codeforces_484B)
- C#datatable实例
- python中的文件编码方式
- 各种排序算法的总结和实现。
- 常见文件系统的格式
- Java注解Annotation详解
- Ubuntu 14.04 安装virtualbox 虚拟机之后无法读取usb 设备问题
- android studio 安装出现两个图标
- tomcat执行一个java类
- WAV文件格式
- 混合时代的开发己经来临