【问题标题】:Issue with Unicode in pythonpython中的Unicode问题
【发布时间】:2015-07-07 06:09:20
【问题描述】:

我需要创建一个类似的字典

d1={u'apple':True}

但我在字符串中有“apple”说 str 问题是如果我写

>>> d1={}
>>> d[u'apple']=True

有效 但是如果我写

>>> d1={}
>>> str="apple"

那么如何在开头添加的unicodeu中插入str呢?

【问题讨论】:

  • 不要将 syntax 与值混淆。 u'...' 生成一个 unicode 对象,但您不需要使用该语法将字节串转换为 unicode 对象。你会解码

标签: python python-2.7 unicode


【解决方案1】:

在 Python3 中,u'apple' 和 "apple" 是相同的。在 Python2 中,两者的行为相同。

>>> "apple"==u"apple"
True

如果需要字节字符串和unicode字符串之间的转换,使用decode:

"apple".decode('utf8')

【讨论】:

  • 它们在 python2 中的行为并不相同。他们有不同的方法,.translate的接口不同等等
  • 此外,它们仅在碰巧是纯可打印 ASCII 时的行为相同,并且 Python 仅处理作为可打印 ASCII 超集的编码。 (即使这也不是真的;它处理将 ¥ 换成反斜杠的日语编码......)
【解决方案2】:

你可以这样做:

>>> d = {}
>>> str_ = "apple"
>>> d[str_.decode('ascii')] = True
>>> d
{u'apple': True}

但我的问题是为什么要打扰?由于在 python 2.x 中,你有

"apple" == u"apple"

这意味着无论你有 unicode 对象还是 bytes 对象,dict 查找/插入/删除都将工作相同。所以这并不重要。

一个类比是使用带有整数0 或浮点数0. 的dict 键,你使用哪个作为键并没有什么区别。

【讨论】:

  • 实际上我正在使用来自 nltk 的 SVM 分类器。那里的词袋格式有这个。这就是我使用它的原因。
猜你喜欢
  • 2013-03-21
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 2011-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
相关资源
最近更新 更多