我正在使用Python 2从ASCII编码的文本文件中解析JSON .
使用json或 加载这些文件时simplejson,我的所有字符串值都转换为Unicode对象而不是字符串对象.问题是,我必须使用一些只接受字符串对象的库的数据.我不能更改库也不能更新它们.
是否可以获取字符串对象而不是Unicode对象?
>>> import json
>>> original_list = ['a', 'b']
>>> json_list = json.dumps(original_list)
>>> json_list
'["a", "b"]'
>>> new_list = json.loads(json_list)
>>> new_list
[u'a', u'b'] # I want these to be of type `str`, not `unicode`Run Code Online (Sandbox Code Playgroud)
很久以前,当我遇到Python 2时,问了这个问题.今天一个简单而干净的解决方案是使用最新版本的Python - 即Python 3和转发版.
为什么这不起作用的任何想法?我真的认为'忽略'会做正确的事.
>>> 'add \x93Monitoring\x93 to list '.encode('latin-1','ignore')
Traceback (most recent call last):
File "<interactive input>", line 1, in ?
UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 4: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud) 我在这里找到了答案:Python UnicodeDecodeError - 我误解了编码吗?
当我读取它时,我需要将传入的文件显式解码为 Unicode.因为它的字符既不可接受也不是unicode.所以编码在遇到这些字符时失败了.
所以,我知道有些东西我不会来这里.
我有一个unicode字符串数组,其中一些包含非Ascii字符.
我想将其编码为json
json.dumps(myList)
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误
UnicodeDecodeError: 'ascii' codec can't decode byte 0xb4 in position 13: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我已经尝试将ensure_ascii参数设置为True和False,但都没有修复此问题.
我知道我将unicode字符串传递给json.dumps.我知道json字符串是unicode.为什么不只是为我排序呢?
我究竟做错了什么?
更新:Don Question明智地建议我提供堆栈跟踪.这里是.:
Traceback (most recent call last):
File "importFiles.py", line 69, in <module>
x = u"%s" % conv
File "importFiles.py", line 62, in __str__
return self.page.__str__()
File "importFiles.py", line 37, in __str__
return json.dumps(self.page(),ensure_ascii=False)
File "/usr/lib/python2.7/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 204, in encode …Run Code Online (Sandbox Code Playgroud)