通过用问号替换麻烦的字节序列来解码无效的utf-8?

时间:2016-04-19 14:40:49

标签: javascript unicode encoding utf-8

问题:我给出了一个字节序列(比如Uint8Array),我想将其解释为utf8编码的字符串。也就是说,我想将字节解码为有效的unicode字符串。

但是,字节可能不是有效的utf8编码。如果是这样的话,我想做出最好的努力"无论如何都试图解码字符串。

在Python中,我可以执行以下操作:

>>> import codecs
>>> codecs.register_error('replace_?', lambda e: (u'?', e.start + 1))
>>> uint8array = map(ord, 'some mostly ok\x80string')
>>> uint8array
[115, 111, 109, 101, 32, 109, 111, 115, 116, 108, 121, 32, 111, 107, 128, 115, 116, 114, 105, 110, 103]
>>> ''.join(map(chr, uint8array)).decode('utf8', 'replace_?')
u'some mostly ok?string'

在JavaScript中,我learned解码将如下:

> uint8array = new Uint8Array([115, 111, 109, 101, 32, 109, 111, 115, 116, 108, 121, 32, 111, 107, 128, 115, 116, 114, 105, 110, 103])
[115, 111, 109, 101, 32, 109, 111, 115, 116, 108, 121, 32, 111, 107, 128, 115, 116, 114, 105, 110, 103]
> decodeURIComponent(escape(String.fromCharCode.apply(null, uint8array)))
Uncaught URIError: URI malformed(…)

正如您所看到的,这引发了一个异常,就像我没有指定自定义编解码器处理程序时的Python代码一样。

我如何获得与Python代码段相同的行为 - 用'?'替换格式错误的utf8字节而不是整个字符串窒息?

0 个答案:

没有答案