support IE11: using utf16to8 and utf8to16 to replace TextEncode and TextDecoder
正在显示
2 个修改的文件
包含
98 行增加
和
14 行删除
| @@ -132,6 +132,7 @@ a:active { | @@ -132,6 +132,7 @@ a:active { | ||
| 132 | 132 | ||
| 133 | <!-- functionality --> | 133 | <!-- functionality --> |
| 134 | <script type="text/javascript" src="scripts/swfobject.js"></script> | 134 | <script type="text/javascript" src="scripts/swfobject.js"></script> |
| 135 | +<script type="text/javascript" src="scripts/utf.js"></script> | ||
| 135 | <script language="javascript"> | 136 | <script language="javascript"> |
| 136 | 137 | ||
| 137 | var queryParameters = new Array(); | 138 | var queryParameters = new Array(); |
| @@ -144,6 +145,7 @@ a:active { | @@ -144,6 +145,7 @@ a:active { | ||
| 144 | var initload = true; | 145 | var initload = true; |
| 145 | var player; | 146 | var player; |
| 146 | 147 | ||
| 148 | + | ||
| 147 | function testWebSocket() | 149 | function testWebSocket() |
| 148 | { | 150 | { |
| 149 | websocket = new WebSocket(wsUri); | 151 | websocket = new WebSocket(wsUri); |
| @@ -193,7 +195,8 @@ a:active { | @@ -193,7 +195,8 @@ a:active { | ||
| 193 | offset += 4; | 195 | offset += 4; |
| 194 | var cam_name = new Uint8Array(evt.target.result, offset , cam_name_len - 1); | 196 | var cam_name = new Uint8Array(evt.target.result, offset , cam_name_len - 1); |
| 195 | offset += cam_name_len; | 197 | offset += cam_name_len; |
| 196 | - var data_sting = new TextDecoder("utf-8").decode(cam_name); | 198 | + //var data_sting = new TextDecoder("utf-8").decode(cam_name); |
| 199 | + var data_sting = utf8to16(cam_name); | ||
| 197 | 200 | ||
| 198 | writeToScreen('<span style="color: blue;">Camera: ' + i + " " + data_sting + ' </span>'); | 201 | writeToScreen('<span style="color: blue;">Camera: ' + i + " " + data_sting + ' </span>'); |
| 199 | var op = document.createElement("option"); | 202 | var op = document.createElement("option"); |
| @@ -214,7 +217,8 @@ a:active { | @@ -214,7 +217,8 @@ a:active { | ||
| 214 | offset += 4; | 217 | offset += 4; |
| 215 | var mic_name = new Uint8Array(evt.target.result, offset , mic_name_len - 1); | 218 | var mic_name = new Uint8Array(evt.target.result, offset , mic_name_len - 1); |
| 216 | offset += mic_name_len; | 219 | offset += mic_name_len; |
| 217 | - var data_sting = new TextDecoder("utf-8").decode(mic_name); | 220 | + //var data_sting = new TextDecoder("utf-8").decode(mic_name); |
| 221 | + var data_sting = utf8to16(mic_name); | ||
| 218 | writeToScreen('<span style="color: blue;">MIC: ' + i + " " + data_sting + ' </span>'); | 222 | writeToScreen('<span style="color: blue;">MIC: ' + i + " " + data_sting + ' </span>'); |
| 219 | var op = document.createElement("option"); | 223 | var op = document.createElement("option"); |
| 220 | op.value = i; | 224 | op.value = i; |
| @@ -230,14 +234,16 @@ a:active { | @@ -230,14 +234,16 @@ a:active { | ||
| 230 | } | 234 | } |
| 231 | else if(95 == result){//get_videoparam success | 235 | else if(95 == result){//get_videoparam success |
| 232 | var data = new Uint8Array(evt.target.result, 8, evt.target.result.byteLength - 8 -1); | 236 | var data = new Uint8Array(evt.target.result, 8, evt.target.result.byteLength - 8 -1); |
| 233 | - var data_sting = new TextDecoder("utf-8").decode(data); | 237 | + //var data_sting = new TextDecoder("utf-8").decode(data); |
| 238 | + var data_sting = utf8to16(data); | ||
| 234 | var td = document.getElementById('videoparam'); | 239 | var td = document.getElementById('videoparam'); |
| 235 | td.value = data_sting; | 240 | td.value = data_sting; |
| 236 | writeToScreen('<span style="color: blue;">get_videoparam result: ' + data_sting + ' </span>'); | 241 | writeToScreen('<span style="color: blue;">get_videoparam result: ' + data_sting + ' </span>'); |
| 237 | } | 242 | } |
| 238 | else{ | 243 | else{ |
| 239 | var data = new Uint8Array(evt.target.result, 8, evt.target.result.byteLength - 8); | 244 | var data = new Uint8Array(evt.target.result, 8, evt.target.result.byteLength - 8); |
| 240 | - var data_sting = new TextDecoder("utf-8").decode(data); | 245 | + //var data_sting = new TextDecoder("utf-8").decode(data); |
| 246 | + var data_sting = utf8to16(data); | ||
| 241 | writeToScreen('<span style="color: blue;">RESPONSE: ' + data_sting + ' </span>'); | 247 | writeToScreen('<span style="color: blue;">RESPONSE: ' + data_sting + ' </span>'); |
| 242 | } | 248 | } |
| 243 | } | 249 | } |
| @@ -292,7 +298,8 @@ a:active { | @@ -292,7 +298,8 @@ a:active { | ||
| 292 | else if(obj.id == "ss_start"){ | 298 | else if(obj.id == "ss_start"){ |
| 293 | cmd.type = 6; | 299 | cmd.type = 6; |
| 294 | var param = document.getElementById("ss_start_input"); | 300 | var param = document.getElementById("ss_start_input"); |
| 295 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 301 | + //cmd.data = new TextEncoder("utf-8").encode(param.value); |
| 302 | + cmd.data = utf16to8(param.value); | ||
| 296 | cmd.data_len = cmd.data.length; | 303 | cmd.data_len = cmd.data.length; |
| 297 | } | 304 | } |
| 298 | else if(obj.id == "ss_stop"){ | 305 | else if(obj.id == "ss_stop"){ |
| @@ -322,7 +329,8 @@ a:active { | @@ -322,7 +329,8 @@ a:active { | ||
| 322 | 329 | ||
| 323 | var window_name_buffer = new Uint8Array(buffer, 24, 256); | 330 | var window_name_buffer = new Uint8Array(buffer, 24, 256); |
| 324 | var window_name = document.getElementById("ds_start_window_name").value; | 331 | var window_name = document.getElementById("ds_start_window_name").value; |
| 325 | - var window_name_array = new TextEncoder("utf-8").encode(window_name); | 332 | + //var window_name_array = new TextEncoder("utf-8").encode(window_name); |
| 333 | + var window_name_array = utf16to8(window_name); | ||
| 326 | for(var i=0;i< window_name_array.length; i++){ | 334 | for(var i=0;i< window_name_array.length; i++){ |
| 327 | window_name_buffer[i] = window_name_array[i]; | 335 | window_name_buffer[i] = window_name_array[i]; |
| 328 | } | 336 | } |
| @@ -350,7 +358,8 @@ a:active { | @@ -350,7 +358,8 @@ a:active { | ||
| 350 | var urlname_len = new Uint32Array(buffer, 4, 1); | 358 | var urlname_len = new Uint32Array(buffer, 4, 1); |
| 351 | urlname_len[0] = 0; | 359 | urlname_len[0] = 0; |
| 352 | var mic_name = new Uint8Array(buffer, 8, 256); | 360 | var mic_name = new Uint8Array(buffer, 8, 256); |
| 353 | - var mic_name_array = new TextEncoder("utf-8").encode(sel_mic_name); | 361 | + //var mic_name_array = new TextEncoder("utf-8").encode(sel_mic_name); |
| 362 | + var mic_name_array = utf16to8(sel_mic_name); | ||
| 354 | for(var i=0;i< mic_name_array.length; i++){ | 363 | for(var i=0;i< mic_name_array.length; i++){ |
| 355 | mic_name[i] = mic_name_array[i]; | 364 | mic_name[i] = mic_name_array[i]; |
| 356 | } | 365 | } |
| @@ -377,7 +386,8 @@ a:active { | @@ -377,7 +386,8 @@ a:active { | ||
| 377 | var urlname_len = new Uint32Array(buffer, 4, 1); | 386 | var urlname_len = new Uint32Array(buffer, 4, 1); |
| 378 | urlname_len[0] = 0; | 387 | urlname_len[0] = 0; |
| 379 | var cam_name = new Uint8Array(buffer, 8, 256); | 388 | var cam_name = new Uint8Array(buffer, 8, 256); |
| 380 | - var cam_name_array = new TextEncoder("utf-8").encode(sel_cam_name); | 389 | + //var cam_name_array = new TextEncoder("utf-8").encode(sel_cam_name); |
| 390 | + var cam_name_array = utf16to8(sel_cam_name); | ||
| 381 | for(var i=0;i< cam_name_array.length; i++){ | 391 | for(var i=0;i< cam_name_array.length; i++){ |
| 382 | cam_name[i] = cam_name_array[i]; | 392 | cam_name[i] = cam_name_array[i]; |
| 383 | } | 393 | } |
| @@ -392,38 +402,41 @@ a:active { | @@ -392,38 +402,41 @@ a:active { | ||
| 392 | else if(obj.id == "set_videoparam"){ | 402 | else if(obj.id == "set_videoparam"){ |
| 393 | cmd.type = 46; | 403 | cmd.type = 46; |
| 394 | var param = document.getElementById("videoparam"); | 404 | var param = document.getElementById("videoparam"); |
| 395 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 405 | + //cmd.data = new TextEncoder("utf-8").encode(param.value); |
| 406 | + cmd.data = utf16to8(param.value); | ||
| 396 | cmd.data_len = cmd.data.length; | 407 | cmd.data_len = cmd.data.length; |
| 397 | } | 408 | } |
| 398 | else if(obj.id == "get_videoparam"){ | 409 | else if(obj.id == "get_videoparam"){ |
| 399 | cmd.type = 47; | 410 | cmd.type = 47; |
| 400 | var sourceSel = document.getElementById("sources"); | 411 | var sourceSel = document.getElementById("sources"); |
| 401 | var index = sourceSel.selectedIndex; | 412 | var index = sourceSel.selectedIndex; |
| 402 | - cmd.data = new TextEncoder("utf-8").encode(sourceSel.options[index].text); | 413 | + //cmd.data = new TextEncoder("utf-8").encode(sourceSel.options[index].text); |
| 414 | + cmd.data = utf16to8(sourceSel.options[index].text); | ||
| 403 | cmd.data_len = cmd.data.length; | 415 | cmd.data_len = cmd.data.length; |
| 404 | } | 416 | } |
| 405 | else if(obj.id == "start_record"){ | 417 | else if(obj.id == "start_record"){ |
| 406 | cmd.type = 48; | 418 | cmd.type = 48; |
| 407 | var param = document.getElementById("start_record_input"); | 419 | var param = document.getElementById("start_record_input"); |
| 408 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 420 | + //cmd.data = new TextEncoder("utf-8").encode(param.value); |
| 421 | + cmd.data = utf16to8(param.value); | ||
| 409 | cmd.data_len = cmd.data.length; | 422 | cmd.data_len = cmd.data.length; |
| 410 | } | 423 | } |
| 411 | else if(obj.id == "stop_record"){ | 424 | else if(obj.id == "stop_record"){ |
| 412 | cmd.type = 49; | 425 | cmd.type = 49; |
| 413 | var param = document.getElementById("start_record_input"); | 426 | var param = document.getElementById("start_record_input"); |
| 414 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 427 | + cmd.data = utf16to8(param.value); |
| 415 | cmd.data_len = cmd.data.length; | 428 | cmd.data_len = cmd.data.length; |
| 416 | } | 429 | } |
| 417 | else if(obj.id == "start_push"){ | 430 | else if(obj.id == "start_push"){ |
| 418 | cmd.type = 50; | 431 | cmd.type = 50; |
| 419 | var param = document.getElementById("start_push_input"); | 432 | var param = document.getElementById("start_push_input"); |
| 420 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 433 | + cmd.data = utf16to8(param.value); |
| 421 | cmd.data_len = cmd.data.length; | 434 | cmd.data_len = cmd.data.length; |
| 422 | } | 435 | } |
| 423 | else if(obj.id == "stop_push"){ | 436 | else if(obj.id == "stop_push"){ |
| 424 | cmd.type = 51; | 437 | cmd.type = 51; |
| 425 | var param = document.getElementById("start_push_input"); | 438 | var param = document.getElementById("start_push_input"); |
| 426 | - cmd.data = new TextEncoder("utf-8").encode(param.value); | 439 | + cmd.data = utf16to8(param.value); |
| 427 | cmd.data_len = cmd.data.length; | 440 | cmd.data_len = cmd.data.length; |
| 428 | } | 441 | } |
| 429 | 442 |
scripts/utf.js
0 → 100644
| 1 | +/* utf.js - UTF-8 <=> UTF-16 convertion | ||
| 2 | + * | ||
| 3 | + * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp> | ||
| 4 | + * Version: 1.0 | ||
| 5 | + * LastModified: Dec 25 1999 | ||
| 6 | + * This library is free. You can redistribute it and/or modify it. | ||
| 7 | + */ | ||
| 8 | +/* hubin modified, to convert from Utf16String to Uint8Array and convert | ||
| 9 | +Uint8Array to Utf16String | ||
| 10 | +*/ | ||
| 11 | +/* | ||
| 12 | + * Interfaces: | ||
| 13 | + * utf8 = utf16to8(utf16); | ||
| 14 | + * utf16 = utf16to8(utf8); | ||
| 15 | + */ | ||
| 16 | + | ||
| 17 | +function utf16to8(str) { | ||
| 18 | + var out, i, len, c; | ||
| 19 | + | ||
| 20 | + len = str.length; | ||
| 21 | + out = new Uint8Array(len * 3); | ||
| 22 | + var utf8len = 0; | ||
| 23 | + for(i = 0; i < len; i++) { | ||
| 24 | + c = str.charCodeAt(i); | ||
| 25 | + if ((c >= 0x0001) && (c <= 0x007F)) { | ||
| 26 | + out[utf8len++] = c; | ||
| 27 | + } else if (c > 0x07FF) { | ||
| 28 | + out[utf8len++] = (0xE0 | ((c >> 12) & 0x0F)); | ||
| 29 | + out[utf8len++] = (0x80 | ((c >> 6) & 0x3F)); | ||
| 30 | + out[utf8len++] = (0x80 | ((c >> 0) & 0x3F)); | ||
| 31 | + } else { | ||
| 32 | + out[utf8len++] = (0xC0 | ((c >> 6) & 0x1F)); | ||
| 33 | + out[utf8len++] = (0x80 | ((c >> 0) & 0x3F)); | ||
| 34 | + } | ||
| 35 | + } | ||
| 36 | + return new Uint8Array(out.buffer, 0, utf8len); | ||
| 37 | +} | ||
| 38 | + | ||
| 39 | +function utf8to16(str) { | ||
| 40 | + var out, i, len, c; | ||
| 41 | + var char2, char3; | ||
| 42 | + | ||
| 43 | + out = ""; | ||
| 44 | + len = str.length; | ||
| 45 | + i = 0; | ||
| 46 | + while(i < len) { | ||
| 47 | + c = str[i++]; | ||
| 48 | + switch(c >> 4) | ||
| 49 | + { | ||
| 50 | + case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: | ||
| 51 | + // 0xxxxxxx | ||
| 52 | + out += String.fromCharCode(c); | ||
| 53 | + break; | ||
| 54 | + case 12: case 13: | ||
| 55 | + // 110x xxxx 10xx xxxx | ||
| 56 | + char2 = str[i++]; | ||
| 57 | + out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F)); | ||
| 58 | + break; | ||
| 59 | + case 14: | ||
| 60 | + // 1110 xxxx 10xx xxxx 10xx xxxx | ||
| 61 | + char2 = str[i++]; | ||
| 62 | + char3 = str[i++]; | ||
| 63 | + out += String.fromCharCode(((c & 0x0F) << 12) | | ||
| 64 | + ((char2 & 0x3F) << 6) | | ||
| 65 | + ((char3 & 0x3F) << 0)); | ||
| 66 | + break; | ||
| 67 | + } | ||
| 68 | + } | ||
| 69 | + | ||
| 70 | + return out; | ||
| 71 | +} |
-
请 注册 或 登录 后发表评论