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

    Python 中的编码问题

    在python中遇到编码问题主要来自于ASCIIgbk两个方面。win中python为unicode 编码而控制台一般为gbk编码

    ASCII

    对于ASCII来说,是由于这一编码系统的显示导致其无法编码中文和特殊字符,所以需要在开始声明 使用utf-8编码.或者在代码开头著名_*_ coding:utf-8 _*_.
    一些有用的命令,查询系统的代码情况:

    import sys
    sys.stdout.encoding  #输出系统编码 cp936
    import local
    locale.getdefaultlocale() #输出 ('zh_CN', 'cp936')

    也可以利用系统模块来进行全局设置:

    import sys
    reload(sys);
    sys.setdefaultencoding('utf-8')

    gbk

    gbk不能解码的问题主要来自于控制台输出为gbk默认编码,所以需要将待输出的string先encode(‘gbk’)以符合控制台的输出,这时候某些在python中的以unicode编码的字符无法用gbk表示,就会造成无法输出x 0x0x的字样.

    所以先要将unicode表示的字符串encode('gbk')交给print才能使用控制台默认编码gbk输出。

    s = "some speciall characeres #$%^&*"
    s.encode('gbk','ignore');  #ignore encode problems
    print s

    保存文件的时候调用的是python内部的写模块,所以gbk不会报错,windows cmd输出才会报错。在进行网络编程时,将get或者post等响应指定编码是很重要的 response.encoding = 'utf-8'

    一个编码解码的流程:

    字符|—–编码encode —-> |byte字节流| ———-解码decode——–>|字符。

    其中编码和解码就是一种数据的转换方式,将字符转为一种字节的表示,包括ascii,gbk,unicode,不同编解码的规则就是不同的字符编码方案。

    注:python3 默认编码为unicode,但win系统不是,造成ptint输出使用系统默认编码而报错。
    一定要注意win系统的gbk编码不足以表示所有的字符,同时ascii编码也不够表示中文和特殊字符。接收字符的时候指定为unicode编码规避ascii问题,输出的时候根据系统来指定编码避免报错。
    可以用UnicodeEncodeError#来捕捉编码异常
    - python 中变量默认是utf-8编码,输出就需要用对应的decode('utf-8')来解码,或者使用输出对应编码来encode('gbk'), 终端输出包含了对byte的解码过程。

    参考资料1,2,3,4

  • 相关阅读:
    拷贝构造,移动构造,右值引用,左值,右值,std::move,std::forward,std::ref
    枚举类型 enum以及enum class
    C++ 静态库LIB的使用方法
    array(数组容器)
    C++标准模板库STL
    C++ 动态库DLL的使用方法
    函数指针与回调函数
    VS项目属性等一系列问题
    逻辑运算符(且或非),位运算符(异或),函数对象运算(bit_or)
    pinpoint-grpc编译异常问题记录
  • 原文地址:https://www.cnblogs.com/Tom-Ren/p/9897832.html
Copyright © 2011-2022 走看看