httpie / cli

🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.
https://httpie.io
BSD 3-Clause "New" or "Revised" License
33.63k stars 3.68k forks source link

Default to encoding specified in XML declaration #358

Closed vovtz closed 3 years ago

vovtz commented 9 years ago

HTTPie seems to assume ISO-8859-1 when decoding XML in UTF-8 form. Below I show the difference between the HTTPie and cURL outputs. The last element displays as “Financiën | Begroting”, respectively “Financiën | Begroting” (Dutch for “Finance | Budget”).

$ http 'https://zoek.officielebekendmakingen.nl/kst-34200-14/metadata_owms.xml'

HTTP/1.1 200 OK
Cache-Control: private
Connection: keep-alive
Content-Disposition: attachment; filename=metadata_owms.xml
Content-Encoding: gzip
Content-Type: text/xml
Date: Fri, 29 May 2015 09:14:39 GMT
Server: nginx
Set-Cookie: ASP.NET_SessionId=d5rme4n4tyrzt52z4hrto5fk; path=/; secure; HttpOnly
Transfer-Encoding: chunked
Vary: Accept-Encoding
X-Frame-Options: SAMEORIGIN

<?xml version="1.0" encoding="UTF-8"?>
<owms-metadata xmlns:ns0="http://purl.org/dc/terms/" xmlns:ns1="http://standaarden.overheid.nl/oep/meta/" xmlns:ns2="http://standaarden.overheid.nl/owms/terms/">
    <owmskern>
        <ns0:identifier>kst-34200-14</ns0:identifier>
        <ns0:title>Financieel jaarverslag van het Rijk 2014; Motie; Motie van het lid Krol over het continueren van het verlaagde btw-tarief voor verbouwingen en renovaties</ns0:title>
        <ns0:language>nl</ns0:language>
        <ns0:type scheme="OVERHEIDop.KamerstukTypen">Motie</ns0:type>
        <ns0:type scheme="OVERHEIDop.Parlementair">Kamerstuk</ns0:type>
        <ns0:creator scheme="OVERHEID.StatenGeneraal">Tweede Kamer der Staten-Generaal</ns0:creator>
        <dcterms.modified>2015-05-27</dcterms.modified>
    </owmskern>
    <owmsmantel>
        <ns0:available>2015-05-27</ns0:available>
        <ns0:issued>2015-05-26</ns0:issued>
    </owmsmantel>
    <oep>
        <ns1:documentStatus>Opgemaakt na onopgemaakt</ns1:documentStatus>
        <ns1:documenttitel>Motie van het lid Krol over het continueren van het verlaagde btw-tarief voor verbouwingen en renovaties</ns1:documenttitel>
        <ns1:dossiernummer>34200</ns1:dossiernummer>
        <ns1:dossiertitel>Financieel jaarverslag van het Rijk 2014</ns1:dossiertitel>
        <ns1:indiener>H.C.M. Krol</ns1:indiener>
        <ns1:ondernummer>14</ns1:ondernummer>
        <ns1:publicationName>Kamerstuk</ns1:publicationName>
        <ns1:vergaderjaar>2014-2015</ns1:vergaderjaar>
        <ns2:organisationType>staten generaal</ns2:organisationType>
        <ns2:category scheme="OVERHEID.TaxonomieBeleidsagenda">Financiën | Begroting</ns2:category>
    </oep>
</owms-metadata>

$ curl 'https://zoek.officielebekendmakingen.nl/kst-34200-14/metadata_owms.xml'

<?xml version="1.0" encoding="UTF-8"?>
<!--Generatie: versie XSLT 1.1 op 2015-05-27+02:00--><owms-metadata xmlns:dcterms="http://purl.org/dc/terms/"
               xmlns:overheid="http://standaarden.overheid.nl/owms/terms/"
               xmlns:overheidop="http://standaarden.overheid.nl/oep/meta/">
   <owmskern>
      <dcterms:identifier>kst-34200-14</dcterms:identifier>
      <dcterms:title>Financieel jaarverslag van het Rijk 2014; Motie; Motie van het lid Krol over het continueren van het verlaagde btw-tarief voor verbouwingen en renovaties</dcterms:title>
      <dcterms:language>nl</dcterms:language>
      <dcterms:type scheme="OVERHEIDop.KamerstukTypen">Motie</dcterms:type>
      <dcterms:type scheme="OVERHEIDop.Parlementair">Kamerstuk</dcterms:type>
      <dcterms:creator scheme="OVERHEID.StatenGeneraal">Tweede Kamer der Staten-Generaal</dcterms:creator>
      <dcterms.modified>2015-05-27</dcterms.modified>
   </owmskern>
   <owmsmantel>
      <dcterms:available>2015-05-27</dcterms:available>
      <dcterms:issued>2015-05-26</dcterms:issued>
   </owmsmantel>
   <oep>
      <overheidop:documentStatus>Opgemaakt na onopgemaakt</overheidop:documentStatus>
      <overheidop:documenttitel>Motie van het lid Krol over het continueren van het verlaagde btw-tarief voor verbouwingen en renovaties</overheidop:documenttitel>
      <overheidop:dossiernummer>34200</overheidop:dossiernummer>
      <overheidop:dossiertitel>Financieel jaarverslag van het Rijk 2014</overheidop:dossiertitel>
      <overheidop:indiener>H.C.M. Krol</overheidop:indiener>
      <overheidop:ondernummer>14</overheidop:ondernummer>
      <overheidop:publicationName>Kamerstuk</overheidop:publicationName>
      <overheidop:vergaderjaar>2014-2015</overheidop:vergaderjaar>
      <overheid:organisationType>staten generaal</overheid:organisationType>
      <overheid:category scheme="OVERHEID.TaxonomieBeleidsagenda">Financiën | Begroting</overheid:category>
   </oep>
</owms-metadata>
jkbrzt commented 9 years ago

It's because the underlying python-requests library defaults to ISO-8859-1 when no charset is specified in Content-Type:

>>> import requests
>>> r = requests.get('https://zoek.officielebekendmakingen.nl/kst-34200-14/metadata_owms.xml')
>>> r.headers['Content-Type']
'text/xml'
>>> r.encoding
'ISO-8859-1'

I guess HTTPie could try to obtain the encoding information from the XML declaration.

Almad commented 3 years ago

Now part of #1022