解决python2.x文件读写编码问题
转自: https://xrlin.github.io/解决python2.x文件读写编码问题/
python2.X版本在处理中文文件读写时经常会遇到乱码或者是UnicodeError错误,正如下面的程序所示:
#coding=utf-8
# test.txt是一个以gbk2312编码(简体中文windows系统中的默认文本编码)的文本文件
# 文本写入
with open('test.txt', 'a') as f:
f.write('test') # 正常写入
f.write('测试') # 正常写入,乱码
f.write(u’测试') # 写入错误,触发UnicodeEncodeError异常
# 文本读取
with open('test.txt') as f:
for line in f:
print line, type(line) # 输出test娴嬭瘯, <type 'str'>
由于脚本源文件中的字符为utf-8编码,而文本文档中的字符为gb2312编码,所以以str类型字符串直接写入文件,此时str字符串的编码与文件编码不同,导致乱码。 直接str类型参数传递给write方法容易导致乱码问题,直接传递Unicode类型字符串作为write的参数,会导致UnicodeEncodeError错误,这是因为python2在写入unicode字符串时会自动尝试转码为ascii编码,而ascii编码并不能处理中文。 知道了问题的根源,首先想到的解决方法就是对源字符串按照文件进行编码,保证编码正确。
# 解决方法1
with open('test.txt', 'w') as f:
f.write('测试'.decode('utf-8').encode('gb2312'))
f.write(u'测试‘.ecode('gb2312')
如果是str类型的字符串,需要使用decode(因为我在脚本中设定#coding=utf8,所以使用decode(‘utf-8’))将其改变为python内部使用的Unicde编码然后使用encode转换成对应的编码类型。
读写操作都需要进行编码转换是个容易导致错误而且烦人的问题,python中提供了codecs这个内置自然语言处理模块方便我们进行不同编码语言的处理,codecs模块的open方法可以指定encoding参数设定文件的编码格式,以后codecs会自动处理文件的读写编码问题,读取的字符串和写入时的字符串参数统一使用python的Unicode类型。使用codecs的open方法代替原来的open方法发可以摆脱烦人的文件编码问题。
with codecs.open('test.txt', 'w', encoding='utf-8') as f:
f.write(u'测试')
with codecs.open('text.txt', encoding='utf-8') as f:
for line in f:
print line, type(line) # output: 测试<type 'unicode'>
解决python2.x文件读写编码问题的更多相关文章
- 【原创】python中文编码问题深入分析(三):python2.7文件读写中文编码问题
上一篇文章介绍和分析了python2.7中使用print遇到的中文编码问题的原因和解决方案,本篇主要介绍一下python2.7中执行文件读写可能遇到的编码问题. 1.文件读取 假如我们读取一个文件,文 ...
- XML文件读写编码不是UTF-8的问题
FileWriter和FileReader在写.读文件时,使用系统当前默认的编码方式. 在中文win下encoding基本是GB2312,在英文win下基本是ISO-8859-1.所以要创建一个UTF ...
- python 文件读写编码
- 第六篇.文件处理之python2和3字符编码的区别
目录 python2和3字符编码的区别 一.字符编码应用之python python2和3字符编码的区别 一.字符编码应用之python 1执行python的三个阶段 python test.py 执 ...
- 解决Python2中文ascii编码的方法
在YiiChina签到的时候,经常会看到有人在说说里面发群主是最帅的,yii 是 PHP 最好的框架,没有之一,就想到使用一言,在每天签到的时候也发一句话 同时使用方糖将内容推送到微信,防止有什么不对 ...
- Java文件读写操作指定编码方式防乱码
读文件:BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够大了. 通常,Re ...
- Python之文件读写
本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 I/O在计算机中是指Input ...
- 解决Python2.7的UnicodeEncodeError:'ascii' codec can't encode characters in position 0-78: ordinal not in range(128)异常错误
解决Python2.7的UnicodeEncodeError: 'ascii' codec can't encode异常错误 大家都知道,在使用python进行网络爬虫时,最头疼的就是转码问题,下面是 ...
- 【转】Python之文件读写
[转]Python之文件读写 本节内容: I/O操作概述 文件读写实现原理与操作步骤 文件打开模式 Python文件操作步骤示例 Python文件读取相关方法 文件读写与字符编码 一.I/O操作概述 ...
随机推荐
- 【leetcode 简单】 第七十二题 各位相加
给定一个非负整数 num,反复将各个位上的数字相加,直到结果为一位数. 示例: 输入: 38 输出: 2 解释: 各位相加的过程为:3 + 8 = 11, 1 + 1 = 2. 由于 2 是一位数,所 ...
- Informatica学习:2、配置存储库服务和集成服务
继续上一篇的1.安装介质的获取与安装,本文介绍服务端的存储库服务和集成服务的配置. 安装好Informatica的客户端和服务端后,需要登陆Administration Console,配置存储库服务 ...
- bootstrap-table 应用
更多内容推荐微信公众号,欢迎关注: 前端代码:js初始化表格,使用服务器端分页:<!DOCTYPE html> <html> <head> <meta cha ...
- 【译】第一篇 Replication:复制简介
本篇文章是SQL Server Replication系列的第一篇,详细内容请参考原文. 复制这个词来自拉丁语中的"replicare",意味着重复.Replication des ...
- 解决 Electron 包下载太慢问题
项目下新建 .npmrc 文件,加入如下配置: electron_mirror=https://npm.taobao.org/mirrors/electron/ 即使用淘宝的源,重新 npm inst ...
- 事件,继承EventArgs带有参数的委托
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- WCF 数据契约(DataContract)
服务契约定义了远程访问对象和可供调用的方法,数据契约则是服务端和客户端之间要传送的自定义数据类型. 一旦声明一个类型为DataContract,那么该类型就可以被序列化在服务端和客户端之间传送,如下所 ...
- 【h5标签转小程序标签】小程序使用wxParse解析html教程
一.先下载所需文件,下载地址:https://pan.baidu.com/s/1umZO9uI24zUTRd7VqaWbAg ,下载完毕后会得到一个wxParse文件夹,后面会用到: 二.先拷贝cs ...
- ThinkPHP文件目录说明
1.ThinkPHP文件包下目录结构说明 2.ThinkPHP文件目录下文件说明 3.Conf目录下 4.Library目录
- 移动端,PC端,微信等常用平台和浏览器判断
var wzw={ //浏览器相关信息 //android webview 需要app进行支持,Android web view初始化时,在navigator中添加标识 browser:{ versi ...