zoukankan      html  css  js  c++  java
  • python_中文乱码问题

    1. 编码和解码的概念:
        编码是将源对象内容按照一种标准转换为一种标准格式内容。
        解码是和编码对应的,它使用和编码相同的标准将编码内容还原为最初的对象内容。

    2. python中的编码和解码:

      (1)decode的作用是将其他编码的字符串转换成unicode编码。

      (2)encode的作用是将unicode编码转换成其他编码的字符串。如果待编码的字符串不是Unicode,python会进行以下两步:

          a) 将字符串转换为解码为Unicode(采用python默认的编码:ASCII)

          b) 将Unicode编码为指定的编码

     3. 文件的编码格式的作用?
         文件的编码格式决定了源文件字符串的编码格式

         当文件中的字符串没有指定编码方式时,则采用“文件的编码格式”

        当文件中的字符串指定了编码方式,则使用指定的编码方式。例如:u"哈"的编码方式为Unicode不管是在GBK文件中,还是UTF-8文件中

    4. python文件中,编码声明的作用?

    a. 声明源文件中将出现非ascii编码,通常也就是中文;

    b. 在高级的IDE中,IDE会将你的文件格式保存成你指定编码格式

    c. 决定源码中类似于u'哈'(unicode)这类声明的将‘哈’解码成unicode所用的编码格式,也是一个比较容易让人迷惑的地方

    5. python默认的编码格式

      python默认的编码方式为ASCII

    6. 操作系统默认的编码格式

      win7 32位系统,默认的编码方式是GBK

    7. 经常出现的问题:

      (1).  【代码和运行结果】:

          文件的编码格式:UTF-8(无BOM编码)

        【编码解读】:

          1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

           故“试图打印中文”会用UTF-8进行编码xE8xAFx95xE5x9BxBExE6x89x93xE5x8DxB0xE4xB8xADxE6x96x87

          2). python默认采用的编码方式为ASCII

            python会用ASCII码对“试图打印中文”进行解码。两种编码方式不一样,故会报错

        【修改方法】:

          1). 在python文件中,加入编码声明: --------此时声明只能声明文件中会出现非ASCII编码,即中文编码

            #-*- coding:utf-8 -*-

      (2).  【代码和运行结果】:

                    文件的编码格式:UTF-8(无BOM编码)

          

        【编码解读】:

                 1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

           故“哈哈”会用UTF-8进行编码xE5x93x88xE5x93x88  

          2). print语句它的实现是将要输出的内容传送了操作系统,操作系统会根据系统的编码对输入的字节流进行编码-----win7 32位操作系统的编码为GBK

            故“xE5x93x88xE5x93x88”用GBK解码成了“鍝堝搱”

        【修改方法】:

          1). 将文件的编码格式修改为GBK(或者GB2312)

      (3).  【代码和运行结果】:

                    文件的编码格式:UTF-8(无BOM编码)

         

        【编码解读】:

                 1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

           故“哈哈”会用UTF-8进行编码xE5x93x88xE5x93x88

          2). encode直接编码的方法会进行如下两步操作:

            将Str解码成Unicode(采用python系统默认的编码方式ASCII)------故此步会报错

            将Unicode编码成GBK

        【修改方法】:

          1). 将python系统的默认编码方式修改为UTF-8

    import sys

    reload(sys)

    sys.setdefaultencoding('utf-8')

          2). 先对str进行解码,解码成Unicode编码格式,后将Unicode编码格式编码成GBK

           str = str.decode("utf-8")
              str = str.encode("gbk")

      (4).  【代码和运行结果】:

                    文件的编码格式:UTF-8(无BOM编码)

          

        【编码解读】:

                 1). 文件的编辑格式:决定了文件中所有字符的编码----UTF-8(无BOM编码)

           故“哈哈”会用UTF-8进行编码xE5x93x88xE5x93x88

          2). str = u"哈哈",转换成Unicode时,不是用文件的编码格式(UTF-8)进行的解码,而是用文件编码声明进行解码(GBK),这样导致出现错误  

        【修改方法】:

          1. 将文件编码声明为:

            #-*- coding:utf-8 -*-

    8. 主要参考:

          (1)http://blog.csdn.net/kiki113/article/details/4062063

          (2)UTF-8、GBK、Unicoded编码对照表

          

  • 相关阅读:
    Atitit sql计划任务与查询优化器统计信息模块
    Atitit  数据库的事件机制触发器与定时任务attilax总结
    Atitit 图像处理知识点体系知识图谱 路线图attilax总结 v4 qcb.xlsx
    Atitit 图像处理 深刻理解梯度原理计算.v1 qc8
    Atiti 数据库系统原理 与数据库方面的书籍 attilax总结 v3 .docx
    Atitit Mysql查询优化器 存取类型 范围存取类型 索引存取类型 AND or的分析
    Atitit View事件分发机制
    Atitit 基于sql编程语言的oo面向对象大规模应用解决方案attilax总结
    Atitti 存储引擎支持的国内点与特性attilax总结
    Atitit 深入理解软件的本质 attilax总结 软件三原则"三次原则"是DRY原则和YAGNI原则的折
  • 原文地址:https://www.cnblogs.com/zhuhaiying/p/5179260.html
Copyright © 2011-2022 走看看