检查字节序列是否是 Javascript 中有效的 UTF-8 序列

zav*_*avg 5 javascript utf-8

有没有一种简单的方法来检查 JavaScript 中的字符串是否是有效的 UTF-8 序列?

我真的不想以这样的正则表达式结束:

用于检测无效 UTF-8 字符串的正则表达式

PS:我从外部 API 接收数据,有时(很少但会发生)它返回带有无效 UTF-8 序列的数据。尝试将它们放入 PostgreSQL 会导致相应的错误。

Raf*_*ele 5

UTF-8 实际上是一种简单的编码,但您所要求的仍然不能用一行完成。你必须:

  1. 覆盖Content-Type响应的 以便在脚本中包含字节数组并防止浏览器/库解释响应本身
  2. 循环字节以生成字符。请注意,UTF-8 是一种可变长度编码,这就是某些序列无效的原因。
  3. 如果发现无效的八位字节,则跳过它
  4. 如果需要,可以通过处理失败将 JSON/XML/任何字符串反序列化为 JavaScript 对象

确定某个数组是否是有效的 UTF-8 序列是一项非常简单的任务(只是一堆if语句和位移位),但这又不是一行代码的事情。