1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
function hex(number)
{
var hexDigit = "0123456789ABCDEF";
var hex = hexDigit.substr(number & 0xf, 1);
while (number > 15) {
number >>= 4;
hex = hexDigit.substr(number & 15, 1) + hex;
}
return hex;
}
function decodeText(charsetName, characterSequence)
{
var req = new XMLHttpRequest;
req.open('GET', 'data:text/plain,' + characterSequence, false);
req.overrideMimeType('text/plain; charset="' + charsetName + '"');
req.send('');
return req.responseText;
}
function decode(charsetName, characterSequence)
{
var decodedText = decodeText(charsetName, characterSequence);
var result = "";
for (var i = 0; i < decodedText.length; ++i) {
var code = hex(decodedText.charCodeAt(i));
if (i)
result += "/";
result += "U+" + ("0000" + code).substr(code.length, 4);
}
return result;
}
function testDecode(charsetName, characterSequence, unicode)
{
shouldBe("decode('" + charsetName + "', '" + characterSequence + "')", "'" + unicode + "'");
}
function batchTestDecode(inputData)
{
for (var i in inputData.encodings) {
for (var j in inputData.encoded)
testDecode(inputData.encodings[i], inputData.encoded[j], inputData.unicode[j]);
}
}
|