zoukankan      html  css  js  c++  java
  • utf8编码和中文不能解码问题解决

    首先我们知道utf-8是一种可变长编码格式,表现为1个英文字母占1个字节,一个汉字占3个字节。

    特点:

      1.支持大部分中文。

      2.是为传输设计的编码。

      3.是unicode字符集(涉及全球所有字符,汉字,英文,日语.......)的一种实现。

    场景:有的同学在遇到with open()这个方法读取某个txt文件时,指定了方法的参数encoding=utf8,制定了读取方式为r,修改了txt文件也是utf8的编码格式,运行代码发现报错了,信息大概就是 ****codec cannot decode byte oxd4****。

    分析:报错信息说明oxd4解码失败,定位解码过程就在于我们选择了r的读取方式。文本模式读取,将字节byte(utf8)转成字符串str(unicode),导致某个编码格式为utf8的中文字符在解码为unicode时报错。

    解决:将r改为rb,即二进制模式读取,不存在中间的将字节byte(utf8)转(解码)为字符串str(unicode)的过程。

    总结:

      1.uft8->unicode,使用decode()方法,方法默认使用“utf8”的编码。(可以理解为我现在指定磁盘上某个编码为uft8的文件去解码为unicode,,方便后续我的python解释器内尺存使用)

      2.r,文本读取模式,即byte->str的转换,但是会遇到部分中文不能成功的情况,即上面的场景。

      3.rb,二进制读取,不将byte转换成str(可以理解为字符集不切换,编码也不切换)

      4.如果公司规定保持2的代码,那么我们可以试试使用iso-8859-1编码格式,这是一种单字节编码格式。

  • 相关阅读:
    RFID基础知识
    iOS开发技巧:使用ObjectiveC创建UUID的代码
    Java获取当前路径
    Oracle 10g 一些事项
    windows 2003 下IIS没有ASP.NET 1.1.4322选项卡
    Windows下手动完全卸载Oracle
    C#如何检测网络端口连接的状态
    windows 2003 下oracle从10.2.0.1升级到10.2.0.4
    Oracle 获取当前日期及日期格式
    Retrieving COM for CLSID {0002450000000000C000000000000046} 80040154.
  • 原文地址:https://www.cnblogs.com/frantz/p/13558027.html
Copyright © 2011-2022 走看看