• python编码问题的理解与解决


    错误:'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)

    看到网上很多都不清楚,做了一天的实验,终于搞清楚这些原理

    如果有错误请指出,谢谢,希望不要一开口就喷。

    总结:理解3个概念,代码编码类型,即python的源代码的编码格式,有中文必须#coding:utf-8,这句话是说pytho以utf-8去解析代码

                                       系统编码类型,指的是控制台的输出平台的编码类型

              系统默认编码类型,指的是在需要转换时的默认转换,一开始把这个与第一点混淆了。

    举例:

    1.

    python默认的代码编码类型为ascii 

    代码中字符串的默认编码与代码文件本身的编码一致

    s='中文' 这里的s为ascii类型

    #coding:utf-8
    必须得有这句才能识别出中文。无论是str还是unicode都得出现这句。
    str默认是utf-8编码类型
    s='中文' 这里的s为utf8类型
    2
    如果字符串是这样定义:s=u'中文'
     则该字符串的编码就被指定为unicode了,即python的内部编码,而与代码文件本身的编码无关。因此,对于这种情况做编码转换,只需要直接使用encode方法将其转换成指定编码即可
     
    3
    import sys
    reload(sys)
    sys.setdefaultencoding('utf-8')

    设置系统默认编码方式为utf-8

    即没有说明的需要转换的会使用utf-8进行转换。

    4 linux系统编码是utf-8,即控制台是utf-8

    print 出来的东西必须和控制台的编码格式兼容。

    5文件的读入

    str的类型为读入的文件的类型

    #coding:utf-8                   声明出现的中文为utf-8。
    import sys
     
    print sys.getdefaultencoding()  系统的默认编码方式认为ascii,
     
    a = '中文' 
    b = u'中文'                                                                                                           
    print repr(a),repr(b)
    print a,  b.encode('utf-8')   #这里的终端是utf-8,a是str,即为utf-8,b是unicode,默认编码为所以必须转成utf-8
     
    reload(sys)
    sys.setdefaultencoding( "utf-8" )
    print sys.getdefaultencoding()
    
    a = '中文' 
    b = u'中文'                                                                                                           
    print type(a),type(b)        #这里终端已经是utf-8,a是str,即utf-8,b是unicode,系统默认编码为utf-8,所以会默认进行utf8编码,效果与主动编码一样
    print repr(a),repr(b)
    print a,   b
    
    
  • 相关阅读:
    数据汇总计算和分析的反思
    排名算法计算
    仿Spring读取配置文件实现方案
    xml 配置文件规范 校验
    批量插入数据(基于Mybatis的实现-Oracle)
    shallow copy 和 deep copy 的示例
    引用对象的使用和易产生bug的示例
    codis安装手册
    Redis安装手册
    map和list遍历基础
  • 原文地址:https://www.cnblogs.com/linjiaqin/p/5562030.html
Copyright © 2020-2023  润新知