1 Encoding = new Object();
\r
2 Encoding.UTF8 = "utf-8";
\r
3 Encoding.UTF16 = "utf-16";
\r
4 Encoding.ASCII = "ascii";
\r
7 Encoding.guessEncoding = function (str) {
\r
8 if (str.charCodeAt(0) == 0xEF && str.charCodeAt(1) == 0xBB && str.charCodeAt(2) == 0xBF) {
\r
9 return Encoding.UTF8;
\r
10 } else if (str.charCodeAt(0) == 0xFF && str.charCodeAt(1) == 0xFE) {
\r
11 return Encoding.UTF16;
\r
13 return Encoding.ASCII;
\r
17 Encoding.readUTF8 = function (str) {
\r
18 var encoding = this.guessEncoding(str);
\r
20 if (encoding == Encoding.UTF8) {
\r
22 } else if (encoding == Encoding.UTF16) {
\r
25 var arrs = new Array();
\r
26 for (var i = startIdx; i < str.length; i++) {
\r
27 var charCode = str.charCodeAt(i);
\r
28 if (charCode < 0x80) {
\r
29 arrs[arrs.length] = str.charAt(i);
\r
30 } else if (charCode > 0xc0 && charCode < 0xe0) {
\r
31 var c1 = charCode & 0x1f;
\r
33 var c2 = str.charCodeAt(i) & 0x3f;
\r
34 var c = (c1 << 6) + c2;
\r
35 arrs[arrs.length] = String.fromCharCode(c);
\r
36 } else if (charCode >= 0xe0) {
\r
37 var c1 = charCode & 0x0f;
\r
39 var c2 = str.charCodeAt(i) & 0x3f;
\r
41 var c3 = str.charCodeAt(i) & 0x3f;
\r
42 var c = (c1 << 12) + (c2 << 6) + c3;
\r
43 arrs[arrs.length] = String.fromCharCode(c);
\r
46 return arrs.join ('');
\r
49 Encoding.convert2UTF8 = function (str) {
\r
50 var encoding = this.guessEncoding(str);
\r
52 if (encoding == Encoding.UTF8) {
\r
54 } else if (encoding == Encoding.UTF16) {
\r
59 var arrs = new Array(offset + str.length - startIdx);
\r
61 arrs[0] = String.fromCharCode(0xEF).charAt(0);
\r
62 arrs[1] = String.fromCharCode(0xBB).charAt(0);
\r
63 arrs[2] = String.fromCharCode(0xBF).charAt(0);
\r
65 for (var i = startIdx; i < str.length; i++) {
\r
66 var charCode = str.charCodeAt(i);
\r
67 if (charCode < 0x80) {
\r
68 arrs[offset + i - startIdx] = str.charAt(i);
\r
69 } else if (charCode <= 0x07ff) { //(charCode > 0xc0 && charCode < 0xe0) {
\r
70 var c1 = 0xc0 + ((charCode & 0x07c0) >> 6);
\r
71 var c2 = 0x80 + (charCode & 0x003f);
\r
72 arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2);
\r
74 var c1 = 0xe0 + ((charCode & 0xf000) >> 12);
\r
75 var c2 = 0x80 + ((charCode & 0x0fc0) >> 6);
\r
76 var c3 = 0x80 + (charCode & 0x003f);
\r
77 arrs[offset + i - startIdx] = String.fromCharCode(c1) + String.fromCharCode(c2) + String.fromCharCode(c3);
\r
80 return arrs.join ('');
\r
82 Encoding.base64Chars = new Array(
\r
83 'A','B','C','D','E','F','G','H',
\r
84 'I','J','K','L','M','N','O','P',
\r
85 'Q','R','S','T','U','V','W','X',
\r
86 'Y','Z','a','b','c','d','e','f',
\r
87 'g','h','i','j','k','l','m','n',
\r
88 'o','p','q','r','s','t','u','v',
\r
89 'w','x','y','z','0','1','2','3',
\r
90 '4','5','6','7','8','9','+','/'
\r
92 Encoding.encodeBase64 = function (str) {
\r
93 if (str == null || str.length == 0) return str;
\r
94 var b64 = Encoding.base64Chars;
\r
95 var length = str.length;
\r
99 while (index < length) {
\r
100 c0 = str.charCodeAt (index++);
\r
101 buf[buf.length] = b64[c0 >> 2];
\r
102 if (index < length) {
\r
103 c1 = str.charCodeAt (index++);
\r
104 buf[buf.length] = b64[((c0 << 4 ) & 0x30) | (c1 >> 4)];
\r
105 if (index < length){
\r
106 c2 = str.charCodeAt (index++);
\r
107 buf[buf.length] = b64[((c1 << 2) & 0x3c) | (c2 >> 6)];
\r
108 buf[buf.length] = b64[c2 & 0x3F];
\r
110 buf[buf.length] = b64[((c1 << 2) & 0x3c)];
\r
111 buf[buf.length] = '=';
\r
114 buf[buf.length] = b64[(c0 << 4) & 0x30];
\r
115 buf[buf.length] = '=';
\r
116 buf[buf.length] = '=';
\r
119 return buf.join ('');
\r
121 Encoding.decodeBase64 = function (str) {
\r
122 if (str == null || str.length == 0) return str;
\r
123 var b64 = Encoding.base64Chars;
\r
124 var xb64 = Encoding.xBase64Chars;
\r
125 if (Encoding.xBase64Chars == null) {
\r
126 xb64 = new Object();
\r
127 for (var i = 0; i < b64.length; i++){
\r
130 Encoding.xBase64Chars = xb64;
\r
132 var length = str.length;
\r
135 var c0, c1, c2, c3;
\r
137 while (index < length && c++ < 60000) {
\r
138 c0 = xb64[str.charAt (index++)];
\r
139 c1 = xb64[str.charAt (index++)];
\r
140 c2 = xb64[str.charAt (index++)];
\r
141 c3 = xb64[str.charAt (index++)];
\r
142 buf[buf.length] = String.fromCharCode(((c0 << 2) & 0xff) | c1 >> 4);
\r
144 buf[buf.length] = String.fromCharCode(((c1 << 4) & 0xff) | c2 >> 2);
\r
146 buf[buf.length] = String.fromCharCode(((c2 << 6) & 0xff) | c3);
\r
150 return buf.join ('');
\r