【问题标题】:Cannot convert unicode to utf-8 in python无法在python中将unicode转换为utf-8
【发布时间】:2016-07-08 20:34:59
【问题描述】:

这一定是一项微不足道的任务,但我无法处理。 我有一个看起来像这样的 json。

        {'
          city': u'\\u0410\\u0431\\u0430\\u043a\\u0430\\u043d', 
        'language':{
          u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439': 5608,      
          u'\\u0418\\u0442\\u0430\\u043b\\u044c\\u044f\\u043d\\u0441\\u043a\\u0438\\u0439': 98
        }
    },

我正在尝试将 unicode 字符串转换为 utf-8。

string=u'\u0410\u0431\u0430\u043a\u0430\u043d'
string.encode('utf-8')

我有

'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'

代替:

u'Абакан'

我做错了什么?

【问题讨论】:

  • 您看到的是字节字符串的repr,它不会尝试显示实际字符。试试printing。
  • 您的示例 JSON 不是真正的 JSON。如果这些是 Python 值,则您在这些 un​​icode 字符串中具有双重编码 \u unicode 转义。这真的是您拥有的还是您手动输入的?
  • 您的string 样本值是正确的unicode 对象,您可以直接打印(print string),同样适用于编码值(print string.encode('utf8'))。您对 Python 交互式解释器回显的 字符串表示 感到困惑,或者用于显示字典或列表等容器的内容。表示是 ASCII 安全的调试值。

标签: python unicode utf-8 encode


【解决方案1】:

我做错了什么?

不打印。

当你在 Python REPL 中评估一个字符串时,你会得到它的repr。这是'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'。打印出来会得到Абакан

print(string.encode('utf-8'))

【讨论】:

  • 那是......愚蠢)谢谢。尽管如此,当我尝试将 json 保存为文件时,我遇到了另一个问题,我有 u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439' 如何将其转换为西里尔字母? with open('file_to_save.txt', 'w') as outfile: json.dump(json_var, outfile)'
  • u'\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439' 不是有效的 JSON。 (注意引号。)u'"\\u0410\\u043d\\u0433\\u043b\\u0438\\u0439\\u0441\\u043a\\u0438\\u0439"' 是有效的 JSON。使用后一个值,import json; print(json.loads(x)) 打印 Английский
【解决方案2】:

正如@Amadan 所说,您只需要打印您的字符串。

但是为什么打印字符串可以解决问题呢?

答案是,如果你输入string + Enter 这将导致显示对象repr()的表示string;在 Python 3.x 中运行 print string(或 print (string))时,您将获得人类可读的字符串表示形式 -str()- of string

>>> converted = string.encode('utf8')
>>> converted
'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
>>> print converted
Абакан
>>> print repr(converted)
'\xd0\x90\xd0\xb1\xd0\xb0\xd0\xba\xd0\xb0\xd0\xbd'
>>> print str(converted)
Абакан
>>> 

延伸阅读:Difference between __str__ and __repr__ in Python

【讨论】:

  • str of string 给出了字符串本身; print(str(x)) == print(x)print(repr(x)) 与 REPL 中的 str(x) 几乎相同(因为 str(x) 将再次使用 repr 显示)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2019-07-20
  • 2018-02-15
  • 1970-01-01
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多