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

问题描述 投票:5回答:2

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

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

javascript html utf-8
2个回答
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 '~'字符),所有其他字符将被删除。

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


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
}
© www.soinside.com 2019 - 2024. All rights reserved.