python 处理中文文件时的编码问题,尤其是utf-8和gbk

python代码文件的编码

py文件默认是ASCII编码,中文在显示时会做一个ASCII到系统默认编码的转换,这时就会出错:SyntaxError: Non-ASCII character。需要在代码文件的第一行或第二行添加编码指示:

  1. # coding=utf-8 ##以utf-8编码储存中文字符
  2. print ‘中文‘像上面那样直接输入的字符串是按照代码文件的编码来处理的,如果用unicode编码,有以下2种方式:
    1. s1 = u‘中文‘ #u表示用unicode编码方式储存信息
    2. s2 = unicode(‘中文‘,‘gbk‘)

unicode是一个内置函数,第二个参数指示源字符串的编码格式。

decode是任何字符串具有的方法,将字符串转换成unicode格式,参数指示源字符串的编码格式。

encode也是任何字符串具有的方法,将字符串转换成参数指定的格式。

python字符串的编码

用 u‘汉字‘ 构造出来的是unicode类型,不用的话构造出来是str类型

str的编码是与系统环境相关的,一般就是sys.getfilesystemencoding()得到的值

所以从unicode转str,要用encode方法

从str转unicode,所以要用decode

例如:

# coding=utf-8   #默认编码格式为utf-8

s = u‘中文‘ #unicode编码的文字
print s.encode(‘utf-8‘)   #转换成utf-8格式输出
print s #效果与上面相同,似乎默认直接转换为指定编码

我的总结:

u=u‘unicode编码文字‘
g=u.encode(‘gbk‘) #转换为gbk格式
print g #此时为乱码,因为当前环境为utf-8,gbk编码文字为乱码
str=g.decode(‘gbk‘).encode(‘utf-8‘)   #以gbk编码格式读取g(因为他就是gbk编码的)并转换为utf-8格式输出
print str #正常显示中文

安全的方法:

s.decode(‘gbk‘,‘ignore‘).encode(‘utf-8′) #以gbk编码读取(当然是读取gbk编码格式的文字了)并忽略错误的编码,转换成utf-8编码输出

因为decode的函数原型是decode([encoding], [errors=‘strict‘]),可以用第二个参数控制错误处理的策略,默认的参数就是strict,代表遇到非法字符时抛出异常;

如果设置为ignore,则会忽略非法字符;
如果设置为replace,则会用?取代非法字符;
如果设置为xmlcharrefreplace,则使用XML的字符引用。

时间: 2024-08-06 11:55:13

python 处理中文文件时的编码问题,尤其是utf-8和gbk的相关文章

python读取中文文件编码问题

python 读取中文文件后,作为参数使用,经常会遇到乱码或者报错asii错误等. 我们需要对中文进行decode('gbk') 如我有一个data.txt文件有如下内容: 百度 谷歌 现在想读取文件中内容构建查询语句代码如下: f=open('data.txt','r') for i in f.readlines(): data_line=i.strip() data=data_line.decode("gbk") print "this is %s"%data

Dom4j读写文件时的编码问题

1.Dom4j写文件时的编码问题 如上图代码所示,如果使用 writer = new XMLWriter(new FileWriter(new File(filepath)), xmlFormat); 下载的xml文件编码格式如下: 原因分析: 由于FileWriter默认的输出编码是ANSI编码,而Dom4j中的wirte方法提供的内容实际是以UTF-8保存的,因此会造成包括中文字符的XML文件无法正常阅读. 解决方法: 不能使用简单的FileWriter,而应该是使用一个能指定具体输出编码的

Python解析xml文件遇到的编码解析的问题

使用python对xml文件进行解析的时候,如果xml文件的头文件是utf-8格式的编码,那么解析是ok的,但如果是其他格式将会出现如下异常: xml.parsers.expat.ExpatError: unknown encoding 因此,为了保证程序的正常运行,我们需要对读取的文件进行编码处理. 1.首先将读取的字符从原来的编码解析,并编码成utf-8: 2.修改xml的encoding: 代码如下: import sys import os import datetime import

python基础11 文件操作 ,字符编码

主要内容 文件操作 文件操作 打开文件的模式 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a r+:可读可写,若文件不存在,报错:w+: 可读可写,若文件不存在,创建. "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模

获取一个临时文件和对中文文件名字进行编码的工具类

首先我们明白,一个文件可以命名为任何名称,比如一个excel,我们可以命名为不带后缀,然后向里面写入对应的内容,只是在导出的时候将文件命名为正确的名字即可. 一个在当前用户的默认临时文件夹中生成一个当前日期的文件夹,然后再里面写入一个用UUID生成名字的文件,常用于JavaEE中文件下载的时候先生成一个临时文件,然后向此文件中写入数据之后打开输入流提供下载. 获取一个临时文件,用于输入内容后打开inputstream提供下载 依赖Slf4j日志和commons-io包 public static

读写文件时遇到编码问题解决方法

读取文件时有时候会遇到编码问题,导致读取的内容为乱码,此时我们可以用iconv来进行转码. 使用file_get_contents()来读取文件内容,但是有时候文件过大的话,就会导致内存溢出,读取失败, 此时使用逐行读取的方法: $file = '1.txt';$handle = fopen($file, 'r');while (!feof($handle)) { $line = fgets($handle); $encoding = mb_detect_encoding($line, arra

解决Django发送中文邮件时的编码及乱码问题

参考自---http://blog.csdn.net/clh604/article/details/9274793 #-*- coding=utf8 -*- from email.message import Message from email.header import Header import smtplib msg=Message() msg['Mime-Version']='1.0' msg['Content-type']='text/html' msg['From']="flow*

pycharm Python 导入本地文件时,有红色的波浪线

1,把整个项目 2, 参考:https://blog.csdn.net/qq_30622831/article/details/80978118 原文地址:https://www.cnblogs.com/yqcf/p/11421523.html

Python编程(三)字符编码与文件处理

计算机要想工作必须通电,也就是说'电'驱使计算机干活,而'电'的特性,就是高低电平(高低平即二进制数1,低电平即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而编程的结果说白了只是一堆字符,也就是说我们编程最终要实现的是:一堆字符驱动计算机干活 所以必须经过一个过程: 字符--------(翻译过程)------->数字 这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码 字符编码 :字符-->二进制数字的标准阶段一:ASCII:一个Bytes代表一