【问题标题】:Check if the bytes sequence is valid UTF-8 sequence in Javascript检查字节序列是否是 Javascript 中有效的 UTF-8 序列
【发布时间】:2014-01-05 12:06:13
【问题描述】:

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

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

Regex to detect invalid UTF-8 string

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

【问题讨论】:

  • 我认为这没有任何意义。字符串是字符的列表。 UTF-8 是一种以二进制格式表示字符的方式。字符串本身没有编码。
  • 除非您尝试确定是否可以使用 utf-8 编码完全表示字符串?
  • 检查 UTF8 是否有效的唯一方法是检查它是否包含 invalid utf8 字符。您链接的正则表达式是执行检查的有效、简洁和高效的方式。当然,您可以以自定义调整的方式检查您自己的字典。
  • 我不知道任何内置方法,所以上次我需要这个时,我使用text.match(/[\x80-\xFF]+/) 收集潜在问题,并根据 UTF 检查每个匹配项-8 规范——52 行代码。使用该正则表达式实际上是一种非常简洁、快速且简单的方法。
  • 或者你想弄清楚一个字节序列是否可以被解释为一个 utf-8 编码的字符串?

标签: javascript utf-8


【解决方案1】:

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

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

确定某个数组是否是有效的 UTF-8 序列是 quite a straightforward task(只是一堆 if 语句和位移),但这又不是单行的事情。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 2016-07-18
    • 2012-12-21
    • 1970-01-01
    • 2015-07-04
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多