在乱码问题上,Python3相比Python2已经好多了,但在处理外来字符时比如文件或者网站时还是会出现乱码问题。

乱码的原因很多,一个是来源的字符编码在接收时处理不当,编程语言默认的UTF8处理gb2312字符时没声明encoding,当然会出错。二是在代码用到的第三方代码使用了默认encoding处理了。三是在控制台或者文本编辑器中,这些程序本身也有默认的encoding。这三个环节没处理好都会出现乱码问题。

以一个最常见的爬虫程序为例。网站在head里本身虽然声明了gbk charset,但有可能是错的。 首先我们要确保requests没有改变编码,而用response.content 就可以确保这一点,因为它是字节流,也就是requests下载的原生内容。然后我们可以调用charset.detect方法判断encoding,结果输出是gb2312

知道来源的编码至关重要,不然我们就不清楚哪里出了错,只能不停试验可以的组合编码和转换。知道原有的编码以后,就可以在随后的每一行代码里查看encoding是否发生改变,如果出现乱码,就可以肯定在这一行指定的encoding有错。

一般来说我们可以print下查看是否有乱码。但这里有个巨大的坑,要看你用的操作系统,终端程序或者IDE。象windows可能是gb2312或者UTF16, Linux则要设置Locale系统变量。而且就算你设置对了,还要考虑是否当前字体是否支持中文,不然也是乱码。

万能的SO有高人给了一个方法可以无视console的encoding, 直接用sys.out.buffer.write() ,但前提是stdout用了正确的编码匹配你的字符变量的编码。

sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

完整的程序如下,在cmd.exe, pycharm, wsl终端下都可以完美显示

import 

扫码关注公众号,获取更多文章

idea console中文乱码_Python3的字符编码乱码问题解决思路相关推荐

  1. python3 设置默认编码_Python3的字符编码乱码问题解决思路

    在乱码问题上,Python3相比Python2已经好多了,但在处理外来字符时比如文件或者网站时还是会出现乱码问题. 乱码的原因很多,一个是来源的字符编码在接收时处理不当,编程语言默认的UTF8处理gb ...

  2. python3 中的Json序列化、反序列化 和 字符编码的问题解决

    python3 中的Json序列化.反序列化 和 字符编码的问题解决 参考文章: (1)python3 中的Json序列化.反序列化 和 字符编码的问题解决 (2)https://www.cnblog ...

  3. Source Insight乱码的解决方案,SI不支持UTF-8字符编码乱码

    最近使用source insight查看一些开源代码,显示中文就乱码,据说是因为source insight不支持utf-8编码,默认编码方式为ANSI码.所以需要将utf-8等非ANSI码的文件转换 ...

  4. php 使用css乱码,分享CSS字符编码引起乱码快速解决的方法

    下面小编就为大家带来一篇分享CSS字符编码引起乱码快速解决的方法.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 乱码引起的CSS失效原理: 由于一个中文是两个字符组成, ...

  5. \xe4\xb8\xad\xe6\x96\x87 phython 字符编码乱码问题

    为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成"\xe4\xb8\xad\xe6\x96\x87"的形式? 为什么会报错"UnicodeEn ...

  6. 字符编码乱码问题(servlet底层 编码大揭秘)

    好多初学者会遇到,请求过去的信息内包含中文(一般会是get方式提交过去的请求会出现).好郁闷,这是为什么呢.有下面分析下,说的不好可以吐槽 话说我们能遇到这种编码的问题,归根结底就是这  这 web开 ...

  7. 中文汉字的正则字符编码范围

    中文编码范围,中文汉字的正则也许用的着. 双字节字符编码范围: 1. GBK (GB2312/GB18030) \x00-\xff GBK双字节编码范围 \x20-\x7f ASCII \xa1-\x ...

  8. J_101.Java工程Properties配置文件注释中文,会自动转换为其他编码方式问题解决

    properties文件中想注释中文,但是写出来后却是 :# /4djf/234/4354/r23df/324d  这种效果 是因为字符编码默认没有设置造成的,以前总是安装插件解决此问题, 但是却牺牲 ...

  9. day_08 字符编码乱码处理

    Python3默认编码是unicode:而Python2是ASCII码.Windows环境默认是gbk编码. 常见编码错误原因: 1. Python解释器的默认编码 2. Python源文件文件编码 ...

最新文章

  1. 智能经济的动力,从人工智能到超级智能
  2. 玩转SpringCloud Spring Cloud 微服务
  3. pytorch 测试 darknet
  4. linux 垃圾桶快捷键,Linux的基本:为网上邻居配个垃圾桶
  5. 第二周 数据分析之展示 Matplotlib基础绘图函数实例
  6. C#网络编程:4订立协议和发送文件
  7. 深入理解 Java 泛型擦除机制
  8. 转: SMTP 服务器无法识别在 Mac 2011 Outlook 中发送电子邮件时错误。错误 17092...
  9. 数据库mysql常用操作_mysql数据库常用操作
  10. 反向传播算法(backpropagation)
  11. 微信小程序,video 全屏视屏展示,广告样式
  12. Hadoop大数据原理与应用实验教程
  13. 安卓桌面壁纸_苹果iPhone全面屏桌面壁纸 第88期 苹果x手机专用高清壁纸
  14. sql——手机号码归属地、身份证前六位归属地、省市区级联
  15. vue项目pc端和移动端适配
  16. Python智能语音机器人
  17. ps在当前的图片添加一张图片进来
  18. 青春不散场,CSDN毕业季有奖征文开启啦~~
  19. thinkphp6 通过命令行快速生成多应用模块报 【Command “build“ is not defined.】错误的解决办法
  20. 如何选择正规MT4外汇平台?外汇投资靠谱吗?

热门文章

  1. KingFly独家爆料!网络赚黑钱,你安心吗?(气愤)
  2. 在联盛德W600 SDK上添加C文件并实现GCC编译
  3. 卡写入速度_看清商家买相机送SD卡的套路,一文教你掌握存储卡选购秘诀
  4. 《剑指offer》c++版本 4.二维数组中的查找
  5. php服务为什么开不了,php怎么打不开
  6. centeros php pgsql,centos php添加pgsql扩展
  7. java自动化初始变量_Java自动化测试-01.环境准备(JDK/环境变量/Intellij IDEA安装)
  8. 软件商店下载java_Sun升级Java应用商店
  9. pycharm调出参数提示气泡
  10. python把列表样式的字符串重新转换为列表