检查javascript字符串是否有效UTF-8

eNd*_*ddy 5 html javascript utf-8

用户可以复制并粘贴到textarea html输入中,有时会粘贴无效的UTF-8字符,例如,从包含选项卡的rtf文件中进行复制和粘贴。

如何检查字符串是否为有效的UTF-8?

Dai*_*Dai 5

我认为您误解了“UTF-8 字符”的含义。UTF-8 是 Unicode 的一种编码,它几乎可以表示人类历史上曾经存在过的几乎所有单个字符和字形,因此没有“无效”的 UTF-8 字符。

RTF 是一种独立于底层编码系统工作的格式系统 - 您可以将 RTF 与 ASCII、UTF-8、UTF-16 等一起使用。HTML 中的文本框仅尊重纯文本,因此任何 RTF 格式都将被自动剥离(除非您使用的是“丰富编辑”组件,我认为您没有使用)。

但是您确实描述了诸如空格字符(如制表符:)\t以 Unicode(以及 UTF-8)表示的内容。包含这些字符的字符串仍然是“有效的 UTF-8”,就您的业务需求而言,它只是无效的。

我建议只使用匹配不可见字符的正则表达式去除不需要的字符(从这里:匹配不可打印/非 ascii 字符并从文本中删除

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
Run Code Online (Sandbox Code Playgroud)

该表达式[^\x20-\x7E]匹配任何不在代码点范围内的字符0x20(32,一个正常的空格字符' ')到0x7E(127,tidle'~'字符),所有其他字符都将被删除。

Unicode 的前 127 个代码点与 ASCII 相同,可以在此处查看:http : //www.asciitable.com/

  • 还要纠正这个答案中的一些误解:没有 UTF8“字符”这样的东西;作为一种编码方案,有“UTF8 字节序列”,对 Unicode 代码点进行编码,这些字节序列 *绝对* 会受到字节序列中非法值的影响。类似地,Unicode 作为“正字法结构”到数字代码的正式映射*也* 具有某些可能无法使用的数字。遇到带有非法字节序列的 UTF8 字节流,或包含非法数字的解码 Unicode 序列是完全可能的,因此:是的,存在“无效的 UTF-8 字符”。 (5认同)