【问题标题】:Decoding of encoded text only works partially (he)编码文本的解码只能部分工作(他)
【发布时间】: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 解释为什么这很重要。

标签: regex decode


【解决方案1】:

您确定不是 Windows-1252 吗?它使用 ISO-8859-1 中未定义的范围,“智能引用”特别邪恶。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2021-08-14
    • 1970-01-01
    • 2015-05-23
    • 2011-05-27
    • 2021-12-13
    相关资源
    最近更新 更多