2013-05-10 36 views
1

我试图清理内容以下链接页面,由SPARQL查询得到的东西:混乱的编码类型的文件转换成可用

http://www.rechercheisidore.fr/sparql/query?query=PREFIX+dcterms%3A+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Fterms%2F%3E+PREFIX+foaf%3A+%3Chttp%3A%2F%2Fxmlns.com%2Ffoaf%2F0.1%2F%3E+SELECT+%3Furicollection+%3Ftitrecollection+%3Fdescription+%3Fadresseweb+WHERE+{+%3Furicollection+%3Fpredicat+%3Chttp%3A%2F%2Fwww.rechercheisidore.fr%2Fclass%2FCollection%3E.+%3Furicollection+dcterms%3Atitle+%3Ftitrecollection.+%3Furicollection+dcterms%3Adescription+%3Fdescription.+%3Furicollection+foaf%3Ahomepage+%3Fadresseweb.+}+ORDER+BY+ASC%28%3Ftitrecollection%29+LIMIT+300&format=application%2Frdf%2Bxml 

的页面是用法语。每个带有重音的字母都没有正确显示,当试图用Python中的好字符替换字符时,它会返回错误。我试图把文件转换为UTF-8,但没有解决任何问题(实际上它已经是UTF-8)混乱的enconding(一个工程师的,因此这个想法从网站证实这是他们三店的错误)。例如:而不是é,您应该看到é

我想要一个文件,我至少可以使用python 2.7 str.replace()函数来取回正确的字符 - 还是有更好的方法来实现这一点?从RDF XML文件证明问题

样品:

<rdf:RDF xmlns:res="http://www.w3.org/2005/sparql-results#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
<rdf:Description rdf:nodeID="rset"> 
<rdf:type rdf:resource="http://www.w3.org/2005/sparql-results#ResultSet" /> 
    <res:resultVariable>uricollection</res:resultVariable> 
    <res:resultVariable>titrecollection</res:resultVariable> 
    <res:resultVariable>description</res:resultVariable> 
    <res:resultVariable>adresseweb</res:resultVariable> 
    <res:solution rdf:nodeID="r0"> 
     <res:binding rdf:nodeID="r0c0"><res:variable>uricollection</res:variable><res:value rdf:resource="http://www.rechercheisidore.fr/resource/10670/3.ewe76u"/></res:binding> 
     <res:binding rdf:nodeID="r0c1"><res:variable>titrecollection</res:variable><res:value>Actualités de l&#39;Ecole des Hautes Etudes en Sciences Sociales</res:value></res:binding> 
     <res:binding rdf:nodeID="r0c2"><res:variable>description</res:variable><res:value>L&#39;Ãcole des hautes études en sciences sociales (EHESS), est issue de la transformation, en 1975, de la sixième section de l&#39;Ãcole pratique des hautes études, section de sciences économiques et sociales, fondée en 1947 par Lucien Febvre, Charles Morazé et Fernand Braudel. L&#39;EHESS occupe une place singulière dans le paysage français de la recherche. Elle forme des docteurs dans toutes les disciplines des sciences humaines et sociales, mais elle n&#39;est pas une université.</res:value></res:binding> 
     <res:binding rdf:nodeID="r0c3"><res:variable>adresseweb</res:variable><res:value rdf:resource="http://www.ehess.fr"/></res:binding> 
    </res:solution> 
+1

我没有看到。那些应该存在的严重编码问题是什么?我看到的只是一个URL编码的查询字符串。你能详细说明吗? – 2013-05-10 18:34:58

+0

我看到非英文单词。不知道该文件应该用什么语言来是... – CppLearner 2013-05-10 18:35:54

+0

@MartijnPieters我并不想清理URL,但随后出现的页面。 – hyogapag 2013-05-10 18:53:55

回答

4

与页面的问题似乎是服务器编码的文本为UTF-8,然后当作UTF-8的Latin-1并以UTF-8 再次编码为。为了逆转这种情况,请以UTF-8格式读取文件,将其编码为Latin-1字节的字符串,然后将字节解码为UTF-8。

+0

你的解释很清楚,而且看起来很合理。非常感谢你。 – hyogapag 2013-05-10 19:33:47

3

jwodder解决方案的佐证:

import lxml.etree as ET 
import urllib2 

url = "http://www.rechercheisidore.fr/sparql/query?query=PREFIX+dcterms:+<http://purl.org/dc/terms/>+PREFIX+foaf:+<http://xmlns.com/foaf/0.1/>+SELECT+?uricollection+?titrecollection+?description+?adresseweb+WHERE+{+?uricollection+?predicat+<http://www.rechercheisidore.fr/class/Collection>.+?uricollection+dcterms:title+?titrecollection.+?uricollection+dcterms:description+?description.+?uricollection+foaf:homepage+?adresseweb.+}+ORDER+BY+ASC(?titrecollection)+LIMIT+300&format=application/rdf+xml" 
doc = ET.parse(urllib2.urlopen(url)) 

namespaces = { 'ns':'http://www.w3.org/2005/sparql-results#', } 

for elt in doc.xpath('//ns:binding[@name="description"]/ns:literal', 
        namespaces=namespaces): 
    text = elt.text 
    if text is not None: 
     text = text.encode('latin-1').decode('utf_8') 
     print(text) 
    break 

产生

L'École des hautes études en sciences sociales (EHESS), est issue de la transformation, en 1975, de la sixième section de l'École pratique des hautes études, section de sciences économiques et sociales, fondée en 1947 par Lucien Febvre, Charles Morazé et Fernand Braudel. L'EHESS occupe une place singulière dans le paysage français de la recherche. Elle forme des docteurs dans toutes les disciplines des sciences humaines et sociales, mais elle n'est pas une université. 
+0

你的线路非常有帮助。不幸的是,我不能将你的答案标记为有用,因为我没有足够的信用。非常感谢你。 – hyogapag 2013-05-10 19:35:49