python中文字符串编码问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中文字符串编码问题相关的知识,希望对你有一定的参考价值。

接口测试的时候,发现接口返回内容是uncodie类型但是包含中文。在使用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编码

 

 

 



以上是关于python中文字符串编码问题的主要内容,如果未能解决你的问题,请参考以下文章

在python 3.6中处理自定义编码时遇到类型错误

Pyhon 中文编码问题(字符串前加‘U’)

python+spark程序代码片段

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration

原创python中文编码问题:控制窗口能输出中文,到文本文件里乱码

Python 必知的 20 个骚操作!