编码获取响应的转换

时间:2016-12-31 22:58:47

标签: xml encoding react-native fetch iconv

在React Native方法中,我正在获取一个用ISO-8859-1编码的xml。

只要提取完成,我就会尝试将其转换为UTF-8。

这里是代码:

const iconv = require('iconv-lite');

fetch('http://www.band.uol.com.br/rss/colunista_64.xml', {
      headers: {
        "Content-type": "text/xml; charset=ISO-8859-1"
      }
})
.then(res=>res.text()})
.then(text => {
   const decodedText = iconv.decode(Buffer.from(text, 'latin1'), 'latin1')
  , output = iconv.encode(decodedText, 'utf8')
   console.log(output.toString())
})

问题是:身体的所有特殊角色都被“¿½”取代

对于转换,我使用的是包iconv-lite

此问题的解决方法是什么?

2 个答案:

答案 0 :(得分:1)

正如Hellon Canella Machado指出的那样,您不能使用int,而必须使用ArrayBuffer作为解决方法。

由于string不适用于React Native,因此您可以使用XMLHttpRequest API

renderHeader = () => {
  return (
    <React.fragment>
      <Text style={styles.headerStyle}>Let's configure to begin...</Text>
      { this.props.navigation.params.hasValue !== undefined &&
        <Button/> }
    </React.Fragment>
  );
}

还要确保已安装软件包res.text()res.arrayBuffer()

答案 1 :(得分:0)

最好的解决方法是使用res.arrayBuffer()代替res.text(),只要Buffer构造函数接受ArrayBuffer

代码:

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))