如何确定JavaScript中的一组字符是否为UTF-8?

时间:2014-02-17 00:45:51

标签: javascript utf-8 character-encoding

这是先前提出的问题的一种变体,但我仍然无法找到答案,所以我试图将其提炼到问题的核心,希望有一个解决方案。

我有一个数据库,由于历史原因,某些文本条目不是UTF-8。大多数是。过去3年的所有参赛作品都是。但是一些较旧的条目不是。

找到非UTF-8字符很重要,这样我就可以避免使用它们,或者将它们转换为UTF-8,以获取我想要生成的某些XML。

我使用的服务器端JavaScript有一个ByteBuffer类型,所以我可以将任何字符集视为单个字节并根据需要检查它们,并且不需要使用String类型,我理解这是有问题的这种情况。

在这种情况下,是否有任何文字检查可以确定它是否有效UTF-8?

我一直在寻找几个月(; _;)但仍然无法找到答案。然而,必须有一种方法,因为XML验证器(如主流浏览器)能够在非UTF-8字符运行时报告“编码错误”。

我只想知道如何完成任何算法,以便我可以尝试在JavaScript中进行相同类型的测试。一旦我知道哪些字符是坏的,我可以将它们从ISO-8859-1(例如)转换为UTF-8。我有方法。

我只是不知道如何弄清楚哪些字符不是UTF-8。同样,我理解在这种情况下使用JavaScript String类型是有问题的,但我确实有一个替代的ByteBuffer类型,它可以按字节处理字符。

感谢人们建议的任何具体测试。

道格

1 个答案:

答案 0 :(得分:0)

我有同样的情况和问题。所有服务器端JavaScript字符串都是16位,但如果我从端点获得JSON,它可以是:UTF-8,ANSI(ASCII),UCS2_BE,UCS2_LE。 UTF16很自然地转换为JavaScript 16位字符串,这是一个问题,因为可变长度字符编码将导致AWS中的SQL注入错误。我使用的服务器端JavaScript会对UTF-8进行一些位移或填充,从而导致以开头的16位JavaScript字符串 这很好,因为我在JavaScript中没有8位字符串我只检查3个第一个字符

你可能没有与位移相同的运气,但下面的功能对我有用。我确信有一个更好,更快的更好的解决方案,但这篇文章已经出了2年,715次观看而不是单一的解决方案。

的Anders

请致电:

var bolResult = isEncoded(strJSON);

/**
 * @description Check if string is UTF8 encoded
 * @param {string} JSON
 * @returns {boolean} true/false
 */
function isEncoded(strJSON) {
        /***************************
         * Valid string starts with:
         * {
         * 239, 187, 191
         ********************/
        var intCharCode0 = strJSON.charCodeAt(0);   //239
        var intCharCode1 = strJSON.charCodeAt(1);   //187
        var intCharCode2 = strJSON.charCodeAt(2);   //191

        if(intCharCode0 === 239 && intCharCode1 === 187 && intCharCode2 === 191){
            return true;
        }
        else{
            return false;
        }
}