【问题标题】:Convert ASCII to Unicode encoding issue [duplicate]将 ASCII 转换为 Unicode 编码问题 [重复]
【发布时间】:2016-07-07 16:03:36
【问题描述】:

我有一个关于 Python 2 编码的问题。我正在尝试将包含字母的 Unicode 代码的 ASCII 字符串解码为 Unicode,然后将其编码回 Latin-1,但没有成功。这是一个插图:

In[27]: d = u'\u010d'

In[28]: print d.encode('utf-8')

č

In[29]: d1 = '\u010d'

In[30]: d1.decode('ascii').encode('utf-8')

Out[30]: '\\u010d'

我想将'\u010d' 转换为'č'。是否有任何内置解决方案可以避免自定义字符串替换?

【问题讨论】:

  • 首先,ASCII 字符串不能包含像 č 这样的重音字符,因为它们不是 ASCII 的一部分。 Python对此很严格,它不会将ASCII解释为“每个字符使用一个字节的任何东西”。现在,如果您使用 Python 的 unicode 而不是 str 来存储字符串,您实际上可以存储该字符,也许还可以将其转换为 Latin-1 字节表示。不过,我建议您更新到 Python 3,因为它针对不同的编码进行了更好的设计。

标签: python python-2.x


【解决方案1】:

当你这样做时

d1 = '\u010d'

你实际上得到了这个字符串:

In [3]: d1
Out[3]: '\\u010d'

这是因为“普通”(非 Unicode)字符串无法识别 \unnnn 转义序列,因此将其转换为文字反斜杠,后跟 unnnn

为了解码,你需要使用unicode_escape codec:

In [4]: print d1.decode("unicode_escape").encode('utf-8')
č

当然,您首先不应该在非 Unicode 字符串中使用 Unicode 转义序列。

【讨论】:

  • 谢谢,解决了我的问题!
猜你喜欢
  • 1970-01-01
  • 2013-04-14
  • 2012-11-27
  • 2011-09-26
  • 2011-01-02
  • 2015-05-08
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多