python处理编码问题和JSON格式

Posted yaoyaohust

tags:

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

从文件读出数据:默认utf8编码

json.dumps()输出数据:默认unicode编码

 

json读取(json是种通用的数据传输格式)
import ujson as json #for performance
jobj = json.loads(json_str) #type(jobj)==<type ‘dict’>
json_str = json.dumps(jobj) #默认输出unicode
json.dumps(jobj, ensure_ascii=False) #输出utf8格式
 
字符串做key
>>> s={}
>>> s[1]=((2,3))
>>> json.dumps(s)
‘{"1":[2,3]}’
 
log,redis,mc_cache,hbase存储都建议使用json格式
python -mjson.tool  #json排版显示
 
ultra json不支持python中long类型
>>> import json, ujson
>>> json.dumps(18446744073709551616L)
‘18446744073709551616‘
>>> ujson.dumps(18446744073709551616L)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: long too big to convert
 
json.dumps输出的字符串手动粘贴置为常量,需要字符串转义,vim操作是s/"/\"/g
 
简单介绍:
json格式:
 
中文编码
def to_utf8(s):
    return s if isinstance(s, str) else s.encode(‘utf8‘)
def to_unicode(s):
    return s if isinstance(s, unicode) else s.decode(‘utf8‘)
中文unicode不能写文件
空格转utf8后无法用strip()去除
>>> s=u‘ 有的时候,之所以哭泣,并不是因为软弱,而是因为坚强太久。@[email protected]_tab‘
>>> t=u‘有的时候,之所以哭泣,并不是因为软弱,而是因为坚强太久。@[email protected]_tab‘
>>> s
u‘xa0u6709u7684u65f6u5019uff0cu4e4bu6240u4ee5u54edu6ce3uff0cu5e76u4e0du662fu56e0u4e3au8f6fu5f31uff0cu800cu662fu56e0u4e3au575au5f3au592au4e45[email protected][email protected]_tab‘
>>> t
u‘u6709u7684u65f6u5019uff0cu4e4bu6240u4ee5u54edu6ce3uff0cu5e76u4e0du662fu56e0u4e3au8f6fu5f31uff0cu800cu662fu56e0u4e3au575au5f3au592au4e45[email protected][email protected]_tab‘
>>> s.strip()
u‘u6709u7684u65f6u5019uff0cu4e4bu6240u4ee5u54edu6ce3uff0cu5e76u4e0du662fu56e0u4e3au8f6fu5f31uff0cu800cu662fu56e0u4e3au575au5f3au592au4e45[email protected][email protected]_tab‘
>>> t.strip()
u‘u6709u7684u65f6u5019uff0cu4e4bu6240u4ee5u54edu6ce3uff0cu5e76u4e0du662fu56e0u4e3au8f6fu5f31uff0cu800cu662fu56e0u4e3au575au5f3au592au4e45[email protected][email protected]_tab‘
>>> s.encode(‘utf8‘)
‘xc2xa0xe6x9cx89xe7x9ax84xe6x97xb6xe5x80x99xefxbcx8cxe4xb9x8bxe6x89x80xe4xbbxa5xe5x93xadxe6xb3xa3xefxbcx8cxe5xb9xb6xe4xb8x8dxe6x98xafxe5x9bxa0xe4xb8xbaxe8xbdxafxe5xbcxb1xefxbcx8cxe8x80x8cxe6x98xafxe5x9bxa0xe4xb8xbaxe5x9dx9axe5xbcxbaxe5xa4xaaxe4xb9x85xe3x80[email protected][email protected]_tab‘
>>> t.encode(‘utf8‘)
‘xe6x9cx89xe7x9ax84xe6x97xb6xe5x80x99xefxbcx8cxe4xb9x8bxe6x89x80xe4xbbxa5xe5x93xadxe6xb3xa3xefxbcx8cxe5xb9xb6xe4xb8x8dxe6x98xafxe5x9bxa0xe4xb8xbaxe8xbdxafxe5xbcxb1xefxbcx8cxe8x80x8cxe6x98xafxe5x9bxa0xe4xb8xbaxe5x9dx9axe5xbcxbaxe5xa4xaaxe4xb9x85xe3x80[email protected][email protected]_tab‘
>>> s.encode(‘utf8‘).strip()
‘xc2xa0xe6x9cx89xe7x9ax84xe6x97xb6xe5x80x99xefxbcx8cxe4xb9x8bxe6x89x80xe4xbbxa5xe5x93xadxe6xb3xa3xefxbcx8cxe5xb9xb6xe4xb8x8dxe6x98xafxe5x9bxa0xe4xb8xbaxe8xbdxafxe5xbcxb1xefxbcx8cxe8x80x8cxe6x98xafxe5x9bxa0xe4xb8xbaxe5x9dx9axe5xbcxbaxe5xa4xaaxe4xb9x85xe3x80[email protected][email protected]_tab‘
>>> t.encode(‘utf8‘).strip()
‘xe6x9cx89xe7x9ax84xe6x97xb6xe5x80x99xefxbcx8cxe4xb9x8bxe6x89x80xe4xbbxa5xe5x93xadxe6xb3xa3xefxbcx8cxe5xb9xb6xe4xb8x8dxe6x98xafxe5x9bxa0xe4xb8xbaxe8xbdxafxe5xbcxb1xefxbcx8cxe8x80x8cxe6x98xafxe5x9bxa0xe4xb8xbaxe5x9dx9axe5xbcxbaxe5xa4xaaxe4xb9x85xe3x80[email protected][email protected]_tab’
参考:也谈 Python 的中文编码处理

以上是关于python处理编码问题和JSON格式的主要内容,如果未能解决你的问题,请参考以下文章

Python处理JSON数据

json格式的文本处理

python中文编码&json中文输出问题

python2下解决json的unicode编码问题

Python处理JSON

求助!,python2处理utf-8编码的中文json.dumps后输出乱码问题,求大神帮忙解决下,谢谢!