2

我正在使用带有特殊字符的 Python 的 simplejson 库对字符串进行编码:

你好测试

特殊字符

优点:+++++

特殊字符:–∑´®†¥¨ˆøπ“ß∂ƒ©˙Δ˚¬Ω≈ç√∫~µ≤≥

但是,当我对其进行编码并将其传输到另一台机器(使用 POST)时,结果如下:

{'message': ['{"body": "hello testing sp\\u00e9ci\\u00dfl characters\\n\\nplusses: \\n\\nspecial chars :\\u0153\\u2211\\u00b4\\u00ae \\u2020\\u00a5\\u00a8\\u02c6\\u00f8\\u03c0\\u201c\\u00df\\u2202\\u0192\\u00a9\\u02d9\\u2206\\u02da\\u00ac\\u03a9\\ u2248\\u00e7\\u221a\\u222b\\u02dc\\u00b5\\u2264\\u2265"}']}

+ 符号被完全去掉,其余的都是这种 unicode(?) 格式。我的代码是:

data = {'body': data_string}
data_encoded = json.dumps(data)

有任何想法吗?谢谢!

编辑:我尝试过使用json.dumps(data, ensure_ascii=False),但会导致UnicodeError ordinal not in range错误。

4

2 回答 2

2
>>> import json

简单的例子,加上加号,Latin1 "s sharp",西里尔字母 "capital zhe"

注意:确保您的字符串是 unicode 或 ASCII:

>>> data = {"body" : u"++\xdf\u0416", "universe": 42}
>>> data
{'body': u'++\xdf\u0416', 'universe': 42}

创建你的 JSON 字符串,结果是 ASCII ——所有非 ASCII 字符都被转义:

>>> encoded = json.dumps(data)
>>> encoded
'{"body": "++\\u00df\\u0416", "universe": 42}'

将您的 JSON 字符串传输到另一台计算机。如果您的传输通道破坏了 ASCII 字符,请确保进行任何必要的进一步转义。在远程计算机上,执行任何必要的取消转义以恢复 JSON 字符串。

然后将 JSON 字符串转换回 Python 对象:

>>> decoded = json.loads(encoded)
>>> decoded
{u'body': u'++\xdf\u0416', u'universe': 42}
>>> decoded == data
True
>>>

关于ensure_ascii=False: 这将产生一个unicode字符串:

>>> u_encoded = json.dumps(data, ensure_ascii=False)
>>> u_encoded
u'{"body": "++\xdf\u0416", "universe": 42}'

在传输之前必须将其编码(UTF-8建议)为字符串,并在另一端解码。您仍然需要对损坏的等字符str采取预防措施。+ < > &

于 2011-01-08T23:50:17.273 回答
0

你那样做吗?

>>> s = u"""
... hello testing
... 
... spécißl characters
... 
... plusses: +++++
... 
... special chars :œ∑´®†¥¨ˆøπ“ß∂ƒ©˙∆˚¬Ω≈ç√∫˜µ≤≥
... """
>>> from json import dumps, loads
>>> loads(dumps(s))
u'\nhello testing\n\nsp\xe9ci\xdfl characters\n\nplusses: +++++\n\nspecial chars :\u0153\u2211\xb4\xae\u2020\xa5\xa8\u02c6\xf8\u03c0\u201c\xdf\u2202\u0192\xa9\u02d9\u2206\u02da\xac\u03a9\u2248\xe7\u221a\u222b\u02dc\xb5\u2264\u2265\n'
>>> print loads(dumps(s))

hello testing

spécißl characters

plusses: +++++

special chars :œ∑´®†¥¨ˆøπ“ß∂ƒ©˙∆˚¬Ω≈ç√∫˜µ≤≥

>>>
于 2011-01-08T23:12:35.437 回答