【发布时间】:2021-07-29 23:10:47
【问题描述】:
从服务器检索的数据以我认为是 ISO-8859-1 的格式编码。 使用“he”库对检索到的文本进行解码后,只解码部分字符串。
**Retrieved encoded text** - A edição "Arquivo LdoD" é uma edição
解码后预期 - 一个 edição "Arquivo LdoD" é uma edição
解码的实际结果 - A edição "Arquivo LdoD" é uma edição
反应代码:
import he from 'he'
.
.
.
useEffect(() => {
getVirtualEditionList(props.acronym)
.then(res => {
setEditionData(res.data.sortedInterpsList)
console.log(res.data.synopsis) //A edição ...
console.log(he.decode(res.data.synopsis)) //A edição "Arquivo LdoD" é ...
setSynopsis(he.decode(res.data.synopsis))
setTitle(he.decode(res.data.title))
setLoading(false)
})
}
}, [props.page])
我必须将检索到的字符串放入代码中,因为 Stackoverflow 已经在解码它的内容,这个解码结果与我在 React 应用程序中解码时得到的值相同。
有没有办法解决这个问题,也许是一种手动解码“he”库无法解码的其余文本的方法?问题似乎在于葡萄牙语/拉丁字符 - é、ç、ã、á。
已解决: 将文本编码为 win1252,然后将其解码为 utf-8:
let decoded = iconv.encode(he.decode(res.data.synopsis), 'win1252');
setSynopsis(decoded.toString())
【问题讨论】:
-
一个公然的mojibake 案例。抱歉,我不知道它的起源,最简单易懂的例子是 Python
'A edição "Arquivo LdoD" é uma edição'.encode( 'cp1252').decode( 'utf-8'),它返回'A edição "Arquivo LdoD" é uma edição'。 -
@JosefZ 谢谢你的回答,它有效!我编码为 windows-1252 并将结果解码为 utf-8,就像你做的那样,但是在 JavaScript 中
-
请自行回答问题并考虑accepting the answer(在规定的时间后)。 See this page 解释为什么这很重要。