【问题标题】:python unicode get value / get textpython unicode 获取值/获取文本
【发布时间】:2015-02-13 10:47:18
【问题描述】:

假设我有一个 unicode 变量:

uni_var = u'Na teatr w pi\xc4\x85tek'

我想要一个字符串,和uni_var一样,只是没有“u”,所以:

str_var = 'Na teatr w pi\xc4\x85tek'

我该怎么做?我想找到类似的东西:

str_var = uni_var.text()

【问题讨论】:

  • 为什么在 Unicode 字符串中使用 UTF-8 字节?不应该是u'Na teatr w pi\u0105tek'吗?
  • 字节是编码文本。所以如果你有一个 unicode 字符串,你需要encode 为字节。如果你的意思是你的 Unicode 字符串中有真正是 UTF-8 字节的代码点,你可以通过编码为 Latin-1 然后再次解码为 UTF-8 来破解它。
  • @Martijn 好吧,如果是这样的话,我会很高兴,但是 [code]u'Na teatr w pi\xc4\x85tek'[\code] 是我从源头得到的这是我无法改变的。
  • 我不明白我的问题在哪里不清楚。但是您的解决方案有效,谢谢帮助;)
  • 很好的解决方案适用于我的情况,但总的来说这不是答案 - 我想没有像“get_text()”这样的方法用于 unicode?​​span>

标签: python unicode python-unicode mojibake


【解决方案1】:

您的 Unicode 似乎解码错误;这些是 UTF-8 字节掩码为 Latin-1 代码点。

您可以通过编码为将 Unicode 代码点一对一映射到字节的编解码器来恢复正确的 UTF-8 字节,例如 Latin-1:

>>> uni_var = u'Na teatr w pi\xc4\x85tek'
>>> uni_var.encode('latin1')
'Na teatr w pi\xc4\x85tek'

但要小心;也可能是这里使用了 CP1252 编码来解码为 Unicode。这完全取决于这个Mojibake 是在哪里产生的。

您也可以使用ftfy library 来检测如何最好地修复此问题;它产生 Unicode 输出:

>>> import ftfy
>>> uni_var = u'Na teatr w pi\xc4\x85tek'
>>> ftfy.fix_text(uni_var)
u'Na teatr w pi\u0105tek'
>>> print ftfy.fix_text(uni_var)
Na teatr w piątek

该库将自动处理 CP1252 Mojibake。

【讨论】:

    【解决方案2】:

    您需要将您的字符串编码为Latin-1

    >>> uni_var = u'Na teatr w pi\xc4\x85tek'
    >>> uni_var.encode('Latin-1')
    'Na teatr w pi\xc4\x85tek'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多