JavaScript处理西里尔字母输入

4

当我从一个西里尔语网站获取JSON数据时,数据以\ufffd格式而不是西里尔语字符的形式呈现。

(例如数据源:http://jsonduit.com/v1/f/l/7sg?cb=getJsonP_1284131679846_0)

所以当我将此数据源作为输入时,会显示奇怪的方框而不是字符。我尝试对输入进行反转义,但仍然无法正常显示。

如何将该数据源恢复回西里尔语?

(顺便提一下,数据源页面编码设置为UTF-8)


我认为你需要确保页面编码与源代码相同。同时,请仔细检查用于显示所有内容的操作系统/字体是否能够显示Unicode。 - mkoistinen
从 utf-8 改为 windows-1251,但结果仍然相同。 - R0b0tn1k
2个回答

5

4

看起来你收到了UTF8字符串。使用以下类来解码:

UTF8 = {
    encode: function(s){
        for(var c, i = -1, l = (s = s.split("")).length, o = String.fromCharCode; ++i < l;
            s[i] = (c = s[i].charCodeAt(0)) >= 127 ? o(0xc0 | (c >>> 6)) + o(0x80 | (c & 0x3f)) : s[i]
        );
        return s.join("");
    },
    decode: function(s){
        for(var a, b, i = -1, l = (s = s.split("")).length, o = String.fromCharCode, c = "charCodeAt"; ++i < l;
            ((a = s[i][c](0)) & 0x80) &&
            (s[i] = (a & 0xfc) == 0xc0 && ((b = s[i + 1][c](0)) & 0xc0) == 0x80 ?
            o(((a & 0x03) << 6) + (b & 0x3f)) : o(128), s[++i] = "")
        );
        return s.join("");
    }
};

使用方法:

var newString = UTF8.decode( yourString );

1
дҪ еҸҜд»ҘдҪҝз”Ёunescape(encodeURIComponent(unicodecharacters))е’ҢdecodeURIComponent(escape(utf8bytes))жқҘеңЁUnicodeеӯ—з¬ҰдёІе’ҢUTF-8зј–з ҒеҚ•е…ғд№Ӣй—ҙиҝӣиЎҢиҪ¬жҚўпјҢж— йңҖжүӢеҠЁзј–еҶҷгҖӮ - bobince

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接