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

时间:2016-03-30 16:46:26

标签: javascript html utf-8

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

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

2 个答案:

答案 0 :(得分:1)

我认为你误解了“UTF-8字符”的含义。 UTF-8是Unicode的编码,它可以代表记录的人类历史中曾经存在过的每一个字符和字形,因此没有“无效”的UTF-8字符。

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

但你确实描述了像空白字符(如标签:\t)这样的东西用Unicode表示(等等,UTF-8)。包含这些字符的字符串仍然是“有效的UTF-8”,就业务要求而言,它只是无效。

我建议使用匹配不可见字符的正则表达式删除不需要的字符(来自此处:Match non printable/non ascii characters and remove from text

textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');

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

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

答案 1 :(得分:0)

只是一个想法:

function checkUTF8(text) {
    var utf8Text = text;
    try {
        // Try to convert to utf-8
        utf8Text = decodeURIComponent(escape(text));
        // If the conversion succeeds, text is not utf-8
    }catch(e) {
        // console.log(e.message); // URI malformed
        // This exception means text is utf-8
    }   
    return utf8Text; // returned text is always utf-8
}