我有一个字典,我需要从Python 3分享到Python 2.我将它作为JSON转储到P3中,然后加载到Python2中。最后,我(我认为)使用yaml.load
转换为P2字符串。
现在我觉得有些不对劲。 我知道有一些unicode字符串打破了包。 我尝试使用
找到它们[key for key in my_dict if type(key) != str]
[]
为什么然后
'C%2B%2B' in my_dict
True
和
type('C%2B%2B')
unicode
没被抓住?为什么列表理解认为它是一个字符串?
[type(key) for key in my_dict if key == 'C%2B%2B']
[str]
最后,有没有办法可以将它转换为str,这样就不会破坏我的代码?
编辑:ipython2似乎在我的计算机上没有一致的行为:
VS
答案 0 :(得分:2)
在编码之前,您必须控制数据到JSON。在Python 3中,确保所有字符串都是unicode对象(即str
类型),然后使用例如{J}文件将它们写入JSON文件。 UTF-8编码。然后使用Python 2中的相同编解码器解码该文件。生成的字符串类型必须为unicode
。你所展示的代码片段没有多大帮助,目前还不清楚你在哪个版本的Python上执行了所显示的每个片段(type('C%2B%2B') == unicode
案例表明你使用的是带有from __future__ import unicode_literals
的Python 2,最后一个但是,片段很可能是在Python 3)中创建的。 必须理解Python 2中的str
类型与Python 3中的str
根本不同。