Ниже представлена реализация получения unicode-символа по шестнадцатеричному коду в методе getUnicodeChar утилитного объекта util.
// utility object
var util = {
// modulo
mod: function (a, b) {
return a % b;
},
// integer division
div: function (a, b) {
return (a - a % b) / b;
},
// convert hex to decimal number
hex2dec: function (hex) {
hex = '' + hex;
var result = 0,
dec, i, len;
for (i = 0, len = hex.length; i < len; i++) {
dec = parseInt(hex.charAt(i), 16);
if (!isFinite(dec)) {
break;
}
result = result * 16 + dec;
}
return result;
},
// convert decimal number to hex
dec2hex: function (number) {
number = +number;
var dec = 0,
result = '',
self = this;
while ((dec = self.mod(number, 16)) > 0) {
result = dec.toString(16) + result;
number = self.div(number, 16);
}
return result;
},
// get unicode char
getUnicodeChar: function (unicode) {
var unicodeChar = '',
uffff = 0,
self = this;
if (unicode.charAt(0) === '\\' && unicode.charAt(1) === 'u') {
uffff = self.hex2dec(unicode.substr(2));
}
return unicodeChar + String.fromCharCode(uffff);
}
};
console.log(util.getUnicodeChar('\\u041a')); // К
console.log(util.hex2dec('041a')); // 1050
console.log(util.dec2hex(1050)); // 41a
Стоит отметить, что методы hex2dec и dec2hex можно реализовать и более простым способом.
// convert hex to decimal number
function hex2dec(hex) {
return parseInt(hex, 16);
}
// convert decimal number to hex
function dec2hex(dec) {
return dec.toString(16);
}
console.log(hex2dec('041a')); // 1050
console.log(dec2hex(1050)); // 41a