【问题标题】:Python not concatenating string and unicode to linkPython没有连接字符串和unicode来链接
【发布时间】:2016-01-02 20:52:46
【问题描述】:

当我将 Unicode 字符串附加到 str 的末尾时,我无法单击 URL。

不好:

base_url = 'https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles='

url = base_url + u"Ángel_Garasa"
print url

好:

base_url = 'https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles='

url = base_url + u"Toby_Maquire"
print url

【问题讨论】:

  • 为什么要解码为 latin-1?
  • 这解决了原来的问题。您可以在original post 中看到问题所在以及我使用这种编码的原因。当然,如果您有一个可以避免这个问题的原始问题的解决方案,那也很棒!
  • 我实际上想知道为什么您需要特殊字符才能使用 url。为什么不对输入进行规范化,并且 url 仍然会解析?在 python 中,您可以通过执行以下操作来消除重音:wiki2 = unicodedata.normalize('NFKD', wiki2).encode('ascii','ignore') after importing unicodedata.
  • 如果.decode('latin1') 作用于 SQL 数据,则 SQL 数据不是 UTF-8。
  • 我提出了一项重大修改,我认为这是问题的症结所在 - 您的 IDE 突出显示了 URL,但您的重音字符使您的 IDE 认为它无效。

标签: python mysql python-2.7 unicode


【解决方案1】:

您似乎是在 IDE(可能是 PyCharm)中打印结果。您需要对字符串的 UTF-8 编码版本进行百分比编码:

import urllib

base_url = 'https://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xml&titles='
name = u"Ángel_Garasa"

print base_url + urllib.quote(name.encode("utf-8"))

这表明:

在您的情况下,您需要更新代码,以便数据库中的相关字段采用百分比编码。您只需要将这一字段编码为 UTF-8 即可用于百分比编码。

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-02
    • 2011-10-11
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    相关资源
    最近更新 更多