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编码对照表

          

  • 相关阅读:
    文档重复检测软件 DuplicateDetector
    Afinal 0.2.1 发布 Android的快速开发框架
    CshBBrain 4.0 发布,高性能WebSocket服务器
    英特尔的 C++ 编译器发布 13.0 版本
    Perl 5.16.2 发布
    OpenBSD 5.2 发布
    Webconverger 15.1 发布,适合网吧的 Linux
    Spring Framework 3.2 RC1 发布
    Postgres 9.2 新特性之:范围类型 (Range Types)
    Expression Blend实例中文教程系列文章汇总
  • 原文地址:https://www.cnblogs.com/zhuhaiying/p/5179260.html
Copyright © 2011-2022 走看看