Skip to main content
 首页 » 编程设计

python之将困惑的编码类型文件转换为可用的文件

2025年05月04日16mate10pro

我正在尝试清理通过 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 中)因此出现了困惑的想法(该网站的一名工程师确认这是他们三重商店中的一个错误).一个示例:您应该看到 é 而不是 é。

我想要一个文件,我至少可以使用 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> 

请您参考如下方法:

该页面的问题似乎是服务器将文本编码为 UTF-8,然后将 UTF-8 视为 Latin-1,并再次将其编码为 UTF-8。要扭转这一局面,请以 UTF-8 格式读取文件,将其编码为 Latin-1 字节字符串,然后将字节解码为 UTF-8。