这是unicode还是str?

时间:2014-06-24 14:08:51

标签: python unicode python-2.x pyyaml

我有一个字典,我需要从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似乎在我的计算机上没有一致的行为:

enter image description here

VS

enter image description here

1 个答案:

答案 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根本不同。