节点JS检测string编码

如何检测节点JS中的string编码,并将string转换为有效的Unicodestring。

例如,如何检测CP437编码的string并将其转换为有效的Unicodestring。

input:¡¡¡¡¡¡¡¡

输出:Quiénhaengañado

我希望dynamic检测编码types,并将string转换为有效的Unicodestring。 提前致谢。

在[Node] JS中没有这样的东西像CP437编码的string。 string始终是Unicode(以及UTF-16代码单元)。

你在¨Quin ha enga¤ado有什么是在过去的某个点(又名mojibake)使用错误编码从字节解码的string。 您需要查找该string来自哪里,并更改用于从字节转换它的编码。

有时可以通过使用与错误地解码它相同的编码将其编码回Buffer,然后使用正确的编码再次解码,从而挽救一个糟糕的解码string。 但是,这只有当所有使用的字节碰巧在错误使用的代码页中都有映射时才有效,并且不会对string造成进一步的损害。

看起来你有一个已经使用ISO-8859-1解码的string,所以原则上你可以把它编码为ISO-8859-1(例如new Buffer(s, 'binary') ),然后将缓冲区解码为cp437 (不幸的是,这个编码在Node中是不可用的,所以你需要像iconv-lite这样的第三方模块)。

然而,你的绳子遭受了进一步的损害,因为é完全消失了。 这可能是因为该字节的错误编码字符是StackOverflow不允许发布的不可见控制字符,或者可能是因为该控制字符已丢失链中的某处。 如果是这样,你根本无法恢复原来的string。

我希望dynamic检测编码types

没有通用的方法来自动检测缓冲区的编码,只有模糊的启发式(请参阅chardet模块的实现)。 当你有mojibake时,这是非常困难的,因为你必须猜测真实的编码和错误应用的编码。

你可以花很多时间来检测常见的模式,但最终你永远不会有一个可靠的解决scheme。 毕竟, ¨Quin ha enga¤ado是一个完全有效的字符序列,你的代码如何知道这不是什么意思?

进一步修正错误的地方,实际发生错误的解码是最好的。