【问题标题】:Encode facebook-sdk cyrillic response in python 2.7在 python 2.7 中编码 facebook-sdk 西里尔文响应
【发布时间】:2017-05-30 12:38:46
【问题描述】:

我有一个字符串列表作为使用 Flask 的 Facebook API 响应

posts_json = graph.get_object(id=address, fields="posts.limit(12){message,link,full_picture}")

一些字符串消息是西里尔字母。我需要将此内容发送到 GUI,Facebook API 响应解码为 un​​icode,因此我尝试先对其进行编码,但我的编码已知的任何内容都不适用于西里尔文内容。

我试过了

item['message'] = post[u'message'].encode('cp850', errors='replace')

结果是这样的

"message": "??????? ? ??? ?????????? ???????????. ???????????? 

还有 'cp866' 和 'ascii' 与 '???...' 和 '/x...' 结果。

我的原始解码消息如下所示:

u'message': u'\u0421 \u0447\u0435\u043c \u043d\u043e\u0441\u0438\u0442\u044c \u0442\u043e\u043f \u0432 \u043f\u0430\u0439\u0435\u0442\u043a\u0438? \u041a\u0430\u043a 

我可以使用什么来正确编码西里尔字母? 提前致谢。

注意:我成功使用“utf-8”编码的所有其他内容。

更新:“utf-8”将我的消息转换为 '\xd0\xa1 \xd1\x87\xd0\xb5\xd0\xbc \xd0\xbd\xd0\xbe\xd1\x81\xd0\xb8\xd1\x82\xd1\x8c \xd1\x82\xd0\xbe\ xd0\xbf \xd0\xb2'

【问题讨论】:

  • 你试过 item['message'].decode('utf-8') 吗?
  • 我用 'utf-8' 对所有其他字段进行了编码,但它不包括西里尔文,这就是为什么我要询问在 Python 中为西里尔文使用哪种编码类型
  • “这就是为什么我要问 Python 中的西里尔字母使用哪种编码类型”——当然是 UTF-8。其他一切都没有多大意义。
  • 不幸的是,utf-8 不适用于这种情况,可能是我的源字符串有问题或者我不知道。无论如何,谢谢。

标签: python python-2.7 facebook-graph-api encoding flask


【解决方案1】:

您的“原始解码消息”已经是 unicode。您可以通过字符串开头的“u”来判断。

正如a comment on a related StackOverflow question 解释的那样:

Python 只显示 unicode 转义符以避免混淆。例如,如果你有一个字符串,其中包含从右到左切换的东西,如果你得到一个 unicode 转义,那么理解 dict 的内容比一切都突然倒退要容易得多。

您不需要进行任何编码或解码,并且应该能够按原样使用字符串。试试print(post["message"])

【讨论】:

  • 我知道 unicode,实际上,我的问题的原因是如何解码(或编码)此字符串以将其传递给 GUI,因为我在客户端显示此消息的主要问题。顺便说一句,python 中的 print(...) 显示 '/u...'。
  • 您是说print(u'\u043d\u043e\u0441\u0438\u0442\u044c') 不会为您打印出носить?你用的是什么版本的 Python?
  • 你是对的,当我完全使用 print post[u'message'] 构造时,它以西里尔字母显示,尽管在 print my_json_with_cyrillic_mes_inside 上。所以问题在于将变量传递给GUI的方式。谢谢
猜你喜欢
  • 2020-05-17
  • 1970-01-01
  • 2016-02-06
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多