如何在Python中将'é'打印为'%C3%A9'?
我在用 rdflib
添加一个包含 Unicode 字符的 URI 到 Graph()
时遇到了问题。
比如说,我想运行:
from rdflib import Graph
g = Graph()
uri = 'http://dbpedia.org/resource/René_Auberjonois'
g.parse(uri)
但是我遇到了一个常见的错误,叫做 ASCII 编码错误,这在 Python 中很常见。
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 17: ordinal not in range(128)
如果这个 URI 是以这样的方式传递的:http://dbpedia.org/resource/Ren%C3%A9_Auberjonois,那就没问题,解析器可以正常工作(抱歉,我不知道该怎么称呼这些东西,是“原始”、“转义”还是“未转义”之类的)。
有没有什么办法可以处理 uri
(它不是以这种方式设置的,而是通过一个函数遍历名字列表来设置的),让 print uri
输出 http://dbpedia.org/resource/Ren%C3%A9_Auberjonois
?
背景:
我最开始问过 这个问题,但是在字符串前加 u
可能不适合我脚本的设置(我并不是像这样设置每个字符串:s = 'René_Auberjonois'
),或者在我传递给 rdflib 时实际上并没有解决问题(也就是说,仍然会出现编码错误,因为传递的是 http://dbpedia.org/resource/René_Auberjonois
)。
另外,如果有好的资源可以帮助我理解我遇到的问题,那就太好了。我现在对字符编码感到困惑。
1 个回答
2
如果你需要的是百分号编码的形式,那么你可以使用urllib
这个库:
>>> import urllib
>>> s='http://dbpedia.org/René_Auberjonois'
>>> urllib.quote(s)
'http%3A//dbpedia.org/Ren%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':')
'http:%2F%2Fdbpedia.org%2FRen%C3%A9_Auberjonois'
>>> urllib.quote(s, safe=':/')
'http://dbpedia.org/Ren%C3%A9_Auberjonois'
>>>
你可以用safe
这个参数来指定哪些字符不需要被编码。默认情况下,它是不编码/
这个字符的。