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编码

				
时间: 2024-10-12 12:50:36

python中文字符串编码问题的相关文章

Python判断字符串编码以及编码的转换

判断字符串编码 使用 chardet 可以很方便的实现字符串/文件的编码检测.尤其是中文网页,有的页面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些页面,知道网页编码很重要 >>> import urllib >>> html = urllib.urlopen('http://www.chinaunix.net').read() >>> import chardet >>> chardet.detect(html) {

Python的字符串编码

本文用实验详细地演示了Python2和Python3在字符串编码上的区别. 在Python2中,字符串字面量对应于8位的字符或面向字节编码的字节字面量.这些字符串的一个重要限制是它们无法完全地支持国际字符集和Unicode编码.为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型.要输入Unicode字符串字面量,要在第一个引号前加上前最'u'. Python2中还有一种称为字节字面量的字符串类型,它是指一个已经编码的字符串字面量,在Python2中字节字面量和普通字符串没

python中文utf8编码后是占3个字符,unicode汉字为2字节

一个中文utf8编码后是占3个字符,所以求长度的函数可以这样写 def str_len(str): try: row_l=len(str) utf8_l=len(str.encode('utf-8')) return (utf8_l-row_l)/2+row_l except: return None return None unicode中汉字为两字节, utf-8中汉字为三字节 https://en.wikipedia.org/wiki/Unicode https://en.wikipedi

python中字符串编码转换

字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理. 注意:在python3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string # 这是一个 UTF-8 编码的字符串 utf8Str = "你好地球&quo

python中文字符串前加u

我明明在编码前就加上了# -*- coding: UTF-8 -*-可是运行时还是出错了, # -*- coding: UTF-8 -*- 这句是告诉python程序中的文本是utf-8编码,让python可以按照utf-8读取程中文前加u就是告诉python后面的是个unicode编码,存储时按unicode格式存储. 参考 http://www.cnblogs.com/ymy124/archive/2012/06/23/2559282.html

Java 中文字符串编码之GBK转UTF-8

写过两篇关于编码的文章了,以为自己比较了解编码了呢?! 结果今天又结结实实的上了一课. 以前转来转去解决的问题终归还是简单的情形.即iso-8859-1转utf-8,或者iso-8859-1转gbk,gb2312之类.这种无损转换,一行代码就搞定. 今天遇到了gbk转utf-8.无论怎么转,都是乱码. 一.乱码的原因 gbk的中文编码是一个汉字用[2]个字节表示,例如汉字"内部"的gbk编码16进制的显示为c4 da b2 bf utf-8的中文编码是一个汉字用[3]个字节表示,例如汉

python中字符串编码问题

个人遇到问题: 某个文件1,里面有字符创"360云盘" 用cat看 用less命令查看时如下: 是用vim查看时如下: 显然在vim是能够正确识别的,也就是说这3个命令查看文件时,编码方式是不一样的. 下面用file命令来查看本文件的编码方式如下:file 文件名 编码方式是:ISO-8859 这个是什么编码方式呢?它是中文编码方式,由于file命令不是取全文,而是截取文章前面部分进行一个判断的.ISO-8859-1 到ISO-8859-16,其实,也就认为是GB2312的汉字编码方式

python 中文url编码处理

可以直接处理中英混排的urlfrom urllib.parse import quote (python3)from urllib import quote (python2) url = 'http://www.baidu.com?search=中文在这里' 不带附加参数 print('\n不带附加参数:\n%s' % quote(url)) 附带不转换字符参数 print('\n附加不转换字符参数:\n%s' % quote(url, safe='/:?=')) 原文地址:http://bl

python 检测字符串编码类型是什么

for index,value in enumerate(listvalue): adchar=chardet.detect(value) print adchar if adchar['encoding']=='utf-8' or adchar['encoding']=='ascii': code='utf-8' else: code='GBK' value=value.decode(code)#解码生成unicode编码 原文地址:https://www.cnblogs.com/apple2