【发布时间】:2018-10-17 07:37:51
【问题描述】:
我有一个来自 bs4 的字符串
s = "vinili-disponibili/311-canzoniere-del-lazio-lassa-st\u00c3\u00a0-la-me-creatura.html"
\u00c3\u00a0应该是重音a(à)我已经让它在控制台中显示部分正确
vinili-disponibili/311-canzoniere-del-lazio-lassa-stà -la-me-creatura.html
与
str2 = u'%s' % s
print(str2.encode('utf-8').decode('unicode-escape'))
但它分别解码 c3 和 a0,所以我得到的是波浪号 A 而不是重音 a。我知道 c3 a0 是重音 a 的十六进制 utf-8。我不知道发生了什么,我使用谷歌和我得到的答案的组合方法来到这里。这整个字符编码的事情对我来说似乎是一团糟。
应该是这样的
311-canzoniere-del-lazio-lassa-stà-la-me-creatura.html
编辑:
Andrey 的方法在打印出来时有效,但尝试将 urlopen 与我得到的字符串一起使用 UnicodeEncodeError: 'ascii' codec can't encode character '\xe0' in position 60: ordinal not in range(128)
使用unquote(str,":/") 后,它会给出UnicodeEncodeError: 'ascii' codec can't encode characters in position 56-57: ordinal not in range(128)。
【问题讨论】:
-
这里有问题。你是怎么得到这样的字符串的?我很确定你已经做错了什么,在上游解决问题比追溯清理烂摊子要好。
-
原始数据是用什么编码创建的?
ISO-8859-1?应该在 HTML 文件的顶部定义。 -
input.encode('latin-1').decode('raw_unicode_escape').encode('latin-1').decode('utf-8')有效,似乎与建议的副本相同。 @Aran-Fey 如果损坏的上游来源是 Facebook 本身,修复可能会很困难。 -
它来自一个网站的 bs4 抓取。该站点调用了一个后端 php 脚本,该脚本输出 html 正文,但所有的 '\' 作为 '\\' 和一堆 '\\t' 和 '\\n'。我只是对整个事情进行正则表达式以使'\\'变为'\',但我无法控制它们的编码。我无法从头部获取编码,因为脚本只生成 html 正文。 @AndreyTyukin 的建议虽然适用于我的数据。
标签: python unicode character-encoding