Encoding conversion of a fetch response

后端 未结 2 1161
旧巷少年郎
旧巷少年郎 2020-12-17 03:03

Inside a React Native method I\'m fetching a xml encoded in ISO-8859-1.

As long as the fetching is completed I\'m trying to convert it to UTF-8.

Here the cod

相关标签:
2条回答
  • 2020-12-17 03:55

    As pointed out by Hellon Canella Machado you can't use res.text() and must use an ArrayBuffer as a workaround.

    Since res.arrayBuffer() doesn't work with fetch in React Native you can use the XMLHttpRequest API.

    import iconv from 'iconv-lite';
    import { Buffer } from 'buffer';
    
    function fetchXML() {
      return new Promise((resolve, reject) => {
        const request = new XMLHttpRequest();
    
        request.onload = () => {
          if (request.status === 200) {
            resolve(iconv.decode(Buffer.from(request.response), 'iso-8859-1'));
          } else {
            reject(new Error(request.statusText));
          }
        };
        request.onerror = () => reject(new Error(request.statusText));
        request.responseType = 'arraybuffer';
    
        request.open('GET', 'http://www.band.uol.com.br/rss/colunista_64.xml');
        request.setRequestHeader('Content-type', 'text/xml; charset=ISO-8859-1');
        request.send();
      });
    }
    
    fetchXML().then(response => 
        console.log(response)
    );
    

    Also make sure that you have the packages buffer and stream installed.

    0 讨论(0)
  • 2020-12-17 03:57

    The best workaround is to use res.arrayBuffer() instead res.text(), as long the Buffer constructor accepts ArrayBuffer

    The code:

    fetch('http://www.band.uol.com.br/rss/colunista_64.xml')
          .then(res => res.arrayBuffer())
          .then(arrayBuffer => iconv.decode(new Buffer(arrayBuffer), 'iso-8859-1').toString())
          .then(converted => console.log(converted))
    
    0 讨论(0)
提交回复
热议问题