zoukankan      html  css  js  c++  java
  • python中文字符串编码问题

    接口测试的时候,发现接口返回内容是unicode类型但是包含中文。在使用print进行打印时输出提示错误:

    UnicodeEncodeError: 'ascii' codec can't encode characters in position 733-738: ordinal not in range(128)

    查阅资料发现是由于内容中包含了中文字符,导致unix系统在print解析是无法正常解析导致。

    源码如下:

    def _ejson(con):
        comm = "echo '%s' | python -m json.tool" % con
        return os.system(comm)
    
    if __name__ == "__main__":
        con =open('con.json','r')
        print _ejson(con)

    经过查阅资料以及自我检查

    发现con返回的是unicode编码的字符串,其中包换中文。导致print的时候解析失败。

    更改后的代码如下:

    def _ejson(con):
        con = con.encode('utf-8')
        comm = "echo '%s' | python -m json.tool" % con
        return os.system(comm)
    
    if __name__ == "__main__":
        con =open('con.json','r')
        print _ejson(con)

    问题得到完美解决。

    附带简单说下python编码的问题:

    Python 有两种字符串类型,str 与 unicode:

    因为 Python 认为 16 位的 unicode 才是字符的唯一内码,而大家常用的字符集如 gb2312,gb18030/gbk,utf-8,以及 ascii 都是字符的二进制(字节)编码形式。

    如果需要将非unicode的编码的str转换成unicode编码,则需要使用decode进行解码,反之如果希望把unicode编码转换成其他字符集则需要使用encode进行编码。

    例如:str.decode('utf-8') 将str转换成unicode编码

       str.encode('utf-8')将str转换成utf-8编码

    通常情况下,我们需要通过unicode编码进行中转换,进行不同类型编码的相互之间转换

    例如:str.decode('gbk').encode('utf-8') 将str由gbk编码变成utf-8编码



  • 相关阅读:
    Spring boot 远程调试
    SpringBoot 日志框架
    樊登读书 你为什么不道歉
    樊登读书 即兴演讲 MD
    樊登读书 爱因斯坦传 MD
    测试页 MD
    樊登读书 你就是孩子最好的玩具 MD
    樊登读书 非暴力沟通 解读 演讲稿 MD
    樊登读书 孔子传 MD
    樊登读书 高效能人士的七个习惯 MD
  • 原文地址:https://www.cnblogs.com/wx2017/p/6962955.html
Copyright © 2011-2022 走看看