zoukankan      html  css  js  c++  java
  • 转python编码问题

    python的编码问题

    http://blog.csdn.net/fuadam/article/details/5547504

    分类: .net以外的东东 747人阅读 评论(4) 收藏 举报

      前两天理解了unicode、utf-8、gb2312这些编码之间的关系以后,今天终于弄明白了在python里面的编码问题。我们在写python脚本时如果有中文的字符串,在运行的时候有可能会报错也有可能会出现乱码。一般加上# -*- coding:utf-8 -*-就不会报错了,但是还可能有乱码问题,而且同样的代码在不同的编辑器中得出的结果还有可能不一样,你是否也遇到过这些问题而且理不清头绪?希望我的讲解能让你对这个问题有一定的理解。

      对于python的一个脚本来说有三种编码:

    1. 脚本文件的编码

        脚本保存时的编码格式,不同的编辑器采用的格式不同会造成一定的混乱,一般是utf-8或者cp936(windows上)

    2. python解析器的编码

       python默认使用ascci编码,所以如果你的脚本中出现了中文,用ascci编码区解析一定会出错,因为ascci不没有utf-8,cp936里面的中文字符的。所以你要在脚本的第一行加入# -*- coding:utf-8 -*-注释来通知python解析器使用utf-8,但是这个只是通知一下python而不是真的用utf-8的编码区解析这里的中文字符串。例如,你写了一个脚本保存的编码是cp936的,如果不加入注释一定会在运行时报错,因为ascci不包括cp936里面的字符,而你写了第一行的注释就不会报错了因为utf-8中有这个字符,但是字符的含义未必是那个中文,它仅仅是处理一下。这里有个地方需要注意如果你的脚本保存时的编码是utf-8的就不需要第一行的注释,python会正确识别。我个人理解是python只识别utf-8和ansi两种格式的文件,ansi格式的需要明确指出coding,否则python默认使用ascci来处理

    3. 运行脚本的环境的编码

        如果运行环境的编码格式与脚本文件的格式相同就正确显示,不同就是乱码,因为运行环境会进行解码

    还是看看代码吧:

    # -*- coding:utf-8 -*- #如果没有这句会报错,默认的ascci无法解析cp936编码

    # cp936编码保存

    str = 'abc中文'

    print str#cmd中正确显示,因为cmd是cp936编码

    ustr = u'abc中文'#报错,因为无法用utf-8的格式去对cp936进行解码,

    ustr1 = unicode(str, 'cp936')#正确, 因为解码用的编码与文件存储的编码相同

    =============================================

    # utf-8编码保存

    str = 'abc中文'

    print str#cmd       #不会报错但是显示为乱码,如果放到cygwin中执行显示正确,因为cygwin的bash是utf-8的

    ustr = u'abc中文'#正确,因为python对utf-8编码的文件默认使用utf-8编码集

    print ustr#正常显示,因为unicode是"通用“的编码集,可以被转化成其他的编码方式

    ==============================================

    # unicode编码保存,实际为utf-16le

    str = 'abc'#报错,因为utf-16的编码会在开头加入 FFFE两个字节,这个时候python会默认使用ascci来处理,因为就算你加了# -*- coding:utf-16 -*- 也没用,因为python还没解析到这句就已经解析失败了

  • 相关阅读:
    LoadRunner系统资源监视
    Loadrunner web_url函数学习(转贴)
    Chrome的开发者工具(Chrome Developer Tools)
    浏览器对同一域名进行请求的最大并发连接数(转贴)
    转贴---Performance Counter(包含最全的Windows计数器解释)
    去掉html代码中多余琐碎的标签
    你永远不知道什么地方有笔误
    office2016开发者选项在哪?
    [VBA]检测一个中文字符串是否包含在另一个字符串中
    电子发票怎么开
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/3517205.html
Copyright © 2011-2022 走看看