Issue#311: Can't show Chinese VM name correctly
Chinese characters have 3 bytes each after decoded by base64, and we need combine 3 bytes into 1 2-byte unicode for String.fromCharCode(number); to decode the character correctly. Signed-off-by: Hongliang Wang <hlwang@linux.vnet.ibm.com>
This commit is contained in:
parent
dd3a8a1b6d
commit
7a17435cd8
|
|
@ -919,7 +919,7 @@ init_msg = function() {
|
||||||
|
|
||||||
/* Connection name/title */
|
/* Connection name/title */
|
||||||
name_length = ws.rQshift32();
|
name_length = ws.rQshift32();
|
||||||
fb_name = Util.decodeUTF8(ws.rQshiftStr(name_length));
|
fb_name = Util.decodeUTF8(ws.rQshiftUStr(name_length));
|
||||||
conf.onDesktopName(that, fb_name);
|
conf.onDesktopName(that, fb_name);
|
||||||
|
|
||||||
if (conf.true_color && fb_name === "Intel(r) AMT KVM")
|
if (conf.true_color && fb_name === "Intel(r) AMT KVM")
|
||||||
|
|
|
||||||
|
|
@ -121,6 +121,46 @@ function rQshiftStr(len) {
|
||||||
rQi += len;
|
rQi += len;
|
||||||
return String.fromCharCode.apply(null, arr);
|
return String.fromCharCode.apply(null, arr);
|
||||||
}
|
}
|
||||||
|
function rQshiftUTFStr(len) {
|
||||||
|
if (typeof(len) === 'undefined') { len = rQlen(); }
|
||||||
|
var arr = [];
|
||||||
|
for(var i = rQi; i < rQi + len; i++) {
|
||||||
|
var code = rQ[i];
|
||||||
|
// 1-byte
|
||||||
|
if(code <= 0x7f) {
|
||||||
|
arr.push(code);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 2-byte
|
||||||
|
if(code <= 0xdf) {
|
||||||
|
var sec = rQ[++i];
|
||||||
|
code = ((code & 0x1c) << 6) | (sec & 0x3f);
|
||||||
|
arr.push(code);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 3-byte
|
||||||
|
if(code <= 0xef) {
|
||||||
|
var sec = rQ[++i];
|
||||||
|
var thi = rQ[++i];
|
||||||
|
code = ((((code & 0xf) << 4) | ((sec & 0x3c) >> 2)) << 8) | (((sec & 0x3) << 6) | (thi & 0x3f));
|
||||||
|
arr.push(code);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// 4-byte
|
||||||
|
if(code <= 0xf7) {
|
||||||
|
var sec = rQ[++i];
|
||||||
|
var thi = rQ[++i];
|
||||||
|
var fou = rQ[++i];
|
||||||
|
var z = ((code & 0x7) << 2) | ((sec & 0x30) >> 4);
|
||||||
|
var y = ((sec & 0xf) << 4) | ((thi & 0x3c) >> 2);
|
||||||
|
var x = ((thi & 0x3) << 6) | (fou & 0x 3f);
|
||||||
|
code = (z << 16) | (y << 8) | x;
|
||||||
|
arr.push(code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rQi += len;
|
||||||
|
return String.fromCharCode.apply(null, arr);
|
||||||
|
}
|
||||||
function rQshiftBytes(len) {
|
function rQshiftBytes(len) {
|
||||||
if (typeof(len) === 'undefined') { len = rQlen(); }
|
if (typeof(len) === 'undefined') { len = rQlen(); }
|
||||||
rQi += len;
|
rQi += len;
|
||||||
|
|
@ -400,6 +440,7 @@ function constructor() {
|
||||||
api.rQshift16 = rQshift16;
|
api.rQshift16 = rQshift16;
|
||||||
api.rQshift32 = rQshift32;
|
api.rQshift32 = rQshift32;
|
||||||
api.rQshiftStr = rQshiftStr;
|
api.rQshiftStr = rQshiftStr;
|
||||||
|
api.rQshiftUStr = rQshiftUTFStr;
|
||||||
api.rQshiftBytes = rQshiftBytes;
|
api.rQshiftBytes = rQshiftBytes;
|
||||||
api.rQslice = rQslice;
|
api.rQslice = rQslice;
|
||||||
api.rQwait = rQwait;
|
api.rQwait = rQwait;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue