2014-04-28 14 views
0
我有传递使用Unicode字符的URI来 rdflib添加到 Graph()

可能在Python中打印'é'为'%C3%A9'?

因此,例如,一个问题

,我想运行:

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

背景: 我原来问this问题,但在字符串前添加u要么不与剧本是如何设置(我没有设定每个字符串,如:s = 'René_Auberjonois')不可行或不实际工作最后当我通过它到rdflib(即仍然得到编码错误,因为它正在通过http://dbpedia.org/resource/René_Auberjonois

此外,如果有很好的资源来理解我在这里,这将是很酷的问题。我现在对字符编码感到困惑。

+0

为什么你不使用'unicode'文字? –

+0

因为我对这个话题并不熟悉,不确定这会对我有什么好处,或者究竟会带来什么(即我不是专业人士) – roy

+0

但是你至少在阅读其他问题的答案,对吧? –

回答

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参数指定不应被引用的字符。它默认为/