解决python乱码问题

字符串在python的内部采用unicode的编码方式,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。 编码是一种用二进制数据表示抽象字符的方式,utf8是一种编码方式。

代码中的字符串编码默认和代码文件编码相同。

decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。

encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。

因此,转码的时候一定要先搞明白,字符串str是什么编码,然后decode成unicode,然后再encode成其他编码

python2中的unicode和python3中的str等价。可以查看s.__class__,如果为则为unicode编码及文本数据,如果为则为utf8编码及二进制数据。str(s, 'utf8')和s.decode('utf8')等价。

如果字符串在代码中被定义为s=u'中文',则s就是python内部编码unicode。

unicode类型再解码会报错。

判断一个字符串是否为unicode方法isinstance(s, unicode),python2中的unicode和python3中的str等价,所以在python3中判断一个字符串是否为unicode方法为isinstance(s, str)。

获取系统默认编码:

importsysprint(sys.getdefaultencoding())

有些IDE输出乱码是因为控制台不能输出字符串的编码,这倒不是程序本身的问题。比如windows的控制台是gb2312编码方式,则utf8的输出格式不能正确输出。

一种输出格式为gb2312避免乱码的方式(如果不确定是哪种编码格式,可以使用一下的通用形式去处理):

#coding=utf-8

s='中文'

if(isinstance(s, str)):#s为u'中文'

s.encode('gb2312')else:#s为'中文'

s.decode('utf8').encode('gb2312')

采用标准库codecs模块

codecs.open(filename, mode='r', encoding=None, errors='strict', buffering=1)importcodecs

f= codecs.open(filename, encoding='utf-8')

使用上边这种方式读进来utf-8文件,会自动转换为unicode。但必须明确该文件类型为utf8类型。

如果是文件中有汉字,不是一个字节一个字节地读而是整个汉字的所有字节读进来然后转换成unicode(猜想跟汉字的utf8编码有关)。

下边的代码也是一种使用codecs的读写方式

#coding=utf-8

importcodecs

fin= open("test.txt", 'r')

fout= open("utf8.txt", 'w')

reader= codecs.getreader('gbk')(fin)

writer= codecs.getwriter('gbk')(fout)

data= reader.read(10)#10是最大字节数,默认值为-1表示尽可能大。可以避免一次处理大量数据

whiledata:

writer.write(data)

data= reader.read(10)

python 乱码转码_Python解决乱码问题相关推荐

  1. 图形化mysql出现乱码_关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)...

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅. 首先: 用show variables like &quo ...

  2. python有哪些码_Python字节码介绍

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 了解Python字节码是什么,Python如何使用它来执行代码,以及了解它可以帮我们干什么. 如果你曾经编 ...

  3. python爬虫的数据如何解决乱码_写爬虫时如何解决网页乱码问题

    实战讲解,文章较长,对爬虫比较熟悉的浏览翻看章节 2.3 获取新闻文本内容. 写爬虫时经常对网址发起请求,结果返回的html数据除了标签能看懂,其他的全部是乱码.大家如果对爬虫感兴趣,请耐心阅读本文, ...

  4. python中文字符串编码_python中文乱码 字符串和编码

    Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了. Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节).现代操作系统和大 ...

  5. python 乱码转码_数据库乱码问题 Python 编码问题(Unicode 的 encode、decode 相互转换 )...

    前言: 今天有个项目需要合并(A合并到B),我所做的就是数据库的合并操作,其中出现的主要问题就是乱码的问题.乱码这个问题是很常见的问题,今天整理了下自己所理解的一点见解. 案例: NAME COMPA ...

  6. python案例源码_python实例作品

    python java 调用 jar 包下载 jython jython 2.1 文章 curiousby 2016-08-01 697浏览量 CrazyWing:Python自动化运维开发实战 十. ...

  7. python文件名有空格_python 解决Windows平台上路径有空格的问题

    最近在采集windows上中间件的时候,遇到了文件路径有空格的问题. 例如:Aapche的安装路径为D:\Program Files\Apache Software Foundation\Apache ...

  8. python 二维码_Python提取支付宝和微信支付二维码

    本文首发于我的个人博客,更多 Python 和 django 开发教程,请访问 追梦人物的博客. 支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二 ...

  9. spring boot html乱码,Spring-boot 字符集设置 解决乱码方案

    使用spring-boot开发时候,有时候程序没事,往往不经意会造成中文到前端变成乱码(????这样情况) 下面给出spring-boot项目统一字符集设置方案: 1.Spring Boot修改编码方 ...

最新文章

  1. OA办公系统的核心-工作流
  2. php 订单过期处理,PHP实现处理过期或者超时订单,并还原库存
  3. tomcat的备份脚本
  4. 系统微服务签发token
  5. VS2015启动调试程序变慢
  6. BBAug: PyTorch的物体检测包
  7. 什么是模型管理和模型运维?
  8. 精通 Python 网络爬虫:核心技术、框架与项目实战
  9. P5520 [yLOI2019] 青原樱(排列组合)
  10. 程序员经常看的开源月刊《HelloGitHub》第 56 期
  11. 常用的Python开发工具有哪些?
  12. 机器学习对回归模型的评价指标:均方误差、可解释方差和R方值
  13. vue中使用rem适配方案
  14. K8s系列之:Deployment应用实战和Deployment相关命令整理
  15. linux下---大于2G的文件解压安装7za
  16. 计算机专业表白文案,521表白文案 2020简短深情的表白句子
  17. RuntimeError: cuda runtime error (30) : unknown error at /pytorch/aten/src/THC/THCGeneral.cpp:50
  18. 验证远程计算机是证书发生错误,win7电脑远程桌面连接提示发生身份验证失败错误 代码0X80070005-♚付涛纪实阁♚...
  19. ClearCase的Server
  20. HTML5离线存储利与弊

热门文章

  1. python字符集_Python任意字符集转换
  2. python多线程处理文件_Python实验:采用多线程在一个文件中查找特定字符串
  3. 计算机网络体系结构(OSI七层、TCP/IP四层、五层协议)
  4. python爬虫知识大全_(硬知识)Python爬虫知识点梳理,认真看好好学
  5. CCS中给工程加入C66x CSL库和头文件
  6. Cortex - M3 中断和异常的区别
  7. 32位十六进制浮点数转换为十进制浮点数的方法
  8. verilog中wire和reg的区别,什么时候用wire?什么时候用reg?
  9. list中抽出某一个字段的值_Java的stream代替List解决单线程等问题
  10. Nodejs实现WebSocket通信demo