字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(encode)成另一种编码。

在新版本的python3中,取消了unicode类型,代替它的是使用unicode字符的字符串类型(str),字符串类型(str)成为基础类型如下所示,而编码后的变为了字节类型(bytes) 但是两个函数的使用方法不变:

例如:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Sep  9 18:11:25 2018@author: lilong
"""u = '中文' #指定字符串类型对象u
str00 = u.encode('gb2312')  # 以gb2312编码对u进行编码,获得bytes类型对象str
u1 = str00.decode('gb2312') # 以gb2312编码对字符串str进行解码,获得字符串类型对象u1
print('u1:',u1)'''
#如果以utf-8的编码对str进行解码得到的结果,将无法还原原来的字符串内容
u2 = str00.decode('utf-8')
print('u2:',u2)
'''import codecs
import chardet#必须事先知道文件的编码格式,这里文件编码是使用的utf-8
f = codecs.open('text_1.txt','w+',encoding='utf-8')
#如果open时使用的encoding和文件本身的encoding不一致的话,那么这里将会产生错误
f.write('显示成功!')
f.close()
print('...........................')## 文件的编码,这里必须是‘rb’即二进制读取
f = open('text_1.txt','rb')
data = f.read()
print(chardet.detect(data))
f.close()
# 读取文件内容,如果是不识别的encoding格式(识别的encoding类型跟使用的系统有关),这里将读取失败
f = codecs.open('text_1.txt','r+')
s = f.read()
# 假设文件保存时以utf-8编码保存,以文件保存格式对内容进行解码,获得unicode字符串
u = s.encode('utf-8').decode('utf-8')
print('u:',u)
f.close()
print('...........................')f = open('corpus_1.txt','rb')
data = f.read()
print(chardet.detect(data))
f.close()f = codecs.open('corpus_1.txt','r+')
# 如果是不识别的encoding格式(识别的encoding类型跟使用的系统有关),这里将读取失败
s = f.read()
# 假设文件保存时以utf-8编码保存,以文件保存格式对内容进行解码,获得unicode字符串
u = s.encode().decode('utf-8')
print('u:',u)
# 下面我们就可以对内容进行各种编码的转换了
u1=u.encode('gb2312')
#print('u1:',u1)
print(u1.decode('gb2312'))
f.close()

结果:

u1: 中文
...........................
{'encoding': 'utf-8', 'confidence': 0.9690625, 'language': ''}
u: 显示成功!
...........................
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
u: <content>南都讯 记者刘凡 周昌和 任笑一 继推出日票后,深圳今后将设地铁VIP头等车厢,设坐票制。昨日,《南都METRO》创刊仪式暨2012年深港地铁圈高峰论坛上透露,在未来的11号线上将增加特色服务,满足不同消费层次的乘客的不同需求,如特设行李架的车厢和买双倍票可有座位坐的VIP车厢等。B厶成希深圳市政府副秘书长、轨道交通建设办公室主任赵鹏林透露,地铁未来的方向将分等级,满足不同层次的人的需求,提供不同层次的有针对的服务。其中包括一些档次稍微高一些的服务。“我们要让公共交通也能满足档次稍高一些的服务”。比如,尝试有座位的地铁票服务。尤其是一些远道而来的乘客,通过提供坐票服务,让乘坐地铁也能享受到非常舒适的体验。他说,这种坐票的服务有望在地铁3期上实行,将加挂2节车厢以实施花钱可买座位的服务。!拔颐窍M轨道交通和家里开的车一样,分很多种。”赵鹏林说,比如有些地铁是“观光线”,不仅沿途的风光非常好,还能凭一张票无数次上下,如同旅游时提供的“通票服务”。再比如,设立可以放大件行李的车厢,今后通过设专门可放大件行李的座位,避免像现在放行李不太方便的现象。“未来地铁初步不仅在干线上铺设,还会在支线、城际线上去建设。”!熬醯萌绻车费不太贵的话,还是愿意考虑的。”昨日市民黄小姐表示,尤其是从老街到机场这一段,老街站每次上下客都很多人,而如果赶上上下班高峰期,特别拥挤,要一路从老街站站到机场,40、50分钟还是挺吃力的,宁愿多花点钱也能稍微舒适一点。但是白领林先生则表示,自己每天上下班都要坐地铁,出双倍车资买坐票费用有点高。</content>
<content>南都讯 记者刘凡 周昌和 任笑一 继推出日票后,深圳今后将设地铁VIP头等车厢,设坐票制。昨日,《南都METRO》创刊仪式暨2012年深港地铁圈高峰论坛上透露,在未来的11号线上将增加特色服务,满足不同消费层次的乘客的不同需求,如特设行李架的车厢和买双倍票可有座位坐的VIP车厢等。B厶成希深圳市政府副秘书长、轨道交通建设办公室主任赵鹏林透露,地铁未来的方向将分等级,满足不同层次的人的需求,提供不同层次的有针对的服务。其中包括一些档次稍微高一些的服务。“我们要让公共交通也能满足档次稍高一些的服务”。比如,尝试有座位的地铁票服务。尤其是一些远道而来的乘客,通过提供坐票服务,让乘坐地铁也能享受到非常舒适的体验。他说,这种坐票的服务有望在地铁3期上实行,将加挂2节车厢以实施花钱可买座位的服务。!拔颐窍M轨道交通和家里开的车一样,分很多种。”赵鹏林说,比如有些地铁是“观光线”,不仅沿途的风光非常好,还能凭一张票无数次上下,如同旅游时提供的“通票服务”。再比如,设立可以放大件行李的车厢,今后通过设专门可放大件行李的座位,避免像现在放行李不太方便的现象。“未来地铁初步不仅在干线上铺设,还会在支线、城际线上去建设。”!熬醯萌绻车费不太贵的话,还是愿意考虑的。”昨日市民黄小姐表示,尤其是从老街到机场这一段,老街站每次上下客都很多人,而如果赶上上下班高峰期,特别拥挤,要一路从老街站站到机场,40、50分钟还是挺吃力的,宁愿多花点钱也能稍微舒适一点。但是白领林先生则表示,自己每天上下班都要坐地铁,出双倍车资买坐票费用有点高。</content>

Python2和Python3在字符串编码上的区别:

python2的这里就不再讲述了,直接看pyhton3的:

>>> '张俊' #python3的字符串默认为unicode格式(无编码)
'张俊'>>> u'张俊' #由于默认为unicode格式,因此字符串不用像python2一样显式地指出其类型,否则是语法错误。
File "<stdin>", line 1
u'张俊'
^
SyntaxError: invalid syntax>>> type('张俊') #python3中文本字符串和字节字符串是严格区分的,默认为unicode格式的文本字符串
<class 'str'>>>> '张俊'.decode('utf-8') #因为默认的文本字符串为unicode格式,因此文本字符串没有decode方法
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'>>> '张俊'.encode('utf-8') #将文本字符串编码,转换为已编码的字节字符串类型
b'\xe5\xbc\xa0\xe4\xbf\x8a'>>> type('张俊'.encode('utf-8'))
<class 'bytes'>>>> print ('张俊'.encode('utf-8')) #对于已编码的字节字符串,文本字符串的许多特性和方法已经不能使用。
b'\xe5\xbc\xa0\xe4\xbf\x8a'>>>print ('张俊'.encode('utf-8'))
b'\xe5\xbc\xa0\xe4\xbf\x8a'>>> print ('张俊'.encode('utf-8').decode('utf-8'))  #必须将字节字符串解码后才能打印出来
张俊

参考:
https://www.cnblogs.com/geekard/archive/2012/10/04/python-string-endec.html

Python3 对于中文文件的读写处理相关推荐

  1. Python3 将中文文件变成英文文件

    契机:程序员再很多情况下,需要把同事给的文件,改成英文名,所有想写个 思路:查找文件夹下的全部中文文件,进行改英文名(通过百度翻译) 缺陷:百度翻译很差,同种中文带点数字,就导致翻译不一致,其实这个脚 ...

  2. python3读取excel数据-Python3操作Excel文件(读写)的简单实例

    安装 读Excel文件通过模块xlrd 写Excel文件同过模块xlwt(可惜的是只支持Python2.3到Python2.7版本) xlwt-future模块,支持Python3.X,用法据说与xl ...

  3. 小白用python处理excel文件-Python3操作Excel文件(读写)的简单实例

    安装 读Excel文件通过模块xlrd 写Excel文件同过模块xlwt(可惜的是只支持Python2.3到Python2.7版本) xlwt-future模块,支持Python3.X,用法据说与xl ...

  4. Python3 读取中文文件txt编码问题

    问题描述 尝试用Python写一个Wordcloud的时候,出现了编码问题. 照着网上某些博客的说法添添改改后,结果是变成了"UnicodeDecodeError: 'utf-8' code ...

  5. python怎么读取中文文件-Python3 中文文件读写方法

    字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以Unicode作为中间编码,即先将其他编码的字符串解码(decode)成Unicode,再从Unicode编码(en ...

  6. python3 读写中文文件

    1.读取中文文件 在open函数末端加一个encoding声明就好了,encoding声明里用的编码是文本自己本身所用的编码,代码如图 inpute = open(copy_file,encoding ...

  7. python读取中文txt文本-Python3 解决读取中文文件txt编码的问题

    问题描述 尝试用Python写一个Wordcloud的时候,出现了编码问题. 照着网上某些博客的说法添添改改后,结果是变成了"UnicodeDecodeError: "utf-8' ...

  8. python读取中文文件报错-Python3 解决读取中文文件txt编码的问题

    问题描述 尝试用Python写一个Wordcloud的时候,出现了编码问题. 照着网上某些博客的说法添添改改后,结果是变成了"UnicodeDecodeError: "utf-8' ...

  9. 在VB中INI文件的读写、删除(对中文支持很好)

    很多时候我们编一个程序不一定要用到注册表来保存设置(如果说一个程序没有设置就不算好程序了).INI是一个很好的选择.有人说,Savesetting是一个不错的选择,但是我了解到,不能永久的保存(起码在 ...

最新文章

  1. mysql 和 mongo db 语法对比
  2. 第一章 GuassDB数据库介绍
  3. centos6.5虚拟机安装后,没有iptables配置文件
  4. c语言1000内亲密对数,《C语言程序的设计上机指导》项目五函数及其应用.pptx
  5. Jzoj5237 最长公共子序列
  6. Python Flask实现查询和添加数据
  7. Android编译自定义sdk,java – 使用自定义android.bluetooth.而不是在android studio中默认的sdk android.jar中存在一个...
  8. 判断页面打开的浏览器信息
  9. 23种设计模式(十五)接口隔离之适配器
  10. 把自定义的demuxer加入ffmpeg源码
  11. 学技术的不能自废武功
  12. 微信机器人框架【Python】
  13. 一键卸载MSSQL_1.2 Beta版
  14. 于歆杰pdf 电路原理_电路原理于歆杰答案pdf
  15. Windows系统服务器配置SSH服务
  16. 手机NFC天线的集总参数设计
  17. javascript:html嵌入javascript代码的三种方式
  18. Kotlin back field
  19. echarts-gl三维展示自定义地图
  20. 计算机设计辅助 CAD 试题汇编,计算机辅助设计试题汇编-第二单元

热门文章

  1. VTK:IO之ReadPNM
  2. VTK:几何对象之Polyhedron
  3. OpenCV EM clustering集群的实例(附完整代码)
  4. Qt Creator使用CVS
  5. C++const与#define 相比,有何优点?
  6. 经典C语言程序100例之八二
  7. php实现java socket_php与java通过socket通信的实现代码
  8. 「Apollo」百度Apollo感知模块(perception)红绿灯检测代码完整+详细解析
  9. 安装OpenLDAP
  10. 02_pandas获取数据(指定列获取、[]方式获取、loc函数,at函数, iloc函数 iat函数)