Как печатать литеральную строку unicode в Javascript?
У меня есть массив, содержащий строки со специальными символами Юникода:
var a = [
["a", 33],
["h\u016B", 44],
["s\u00EF", 51],
...
];
Когда я петлю над этим массивом:
for (i=0;i<a.length;i++) {
document.write(a[i][0] + "<br />");
}
Он печатает символы с акцентами:
a
hù
sô
...
и я хочу:
a
h\u016B
s\u00EF
...
Как я могу достичь этого в Javascript?
Ответы
Ответ 1
Что-то вроде этого?
/* Creates a uppercase hex number with at least length digits from a given number */
function fixedHex(number, length){
var str = number.toString(16).toUpperCase();
while(str.length < length)
str = "0" + str;
return str;
}
/* Creates a unicode literal based on the string */
function unicodeLiteral(str){
var i;
var result = "";
for( i = 0; i < str.length; ++i){
/* You should probably replace this by an isASCII test */
if(str.charCodeAt(i) > 126 || str.charCodeAt(i) < 32)
result += "\\u" + fixedHex(str.charCodeAt(i),4);
else
result += str[i];
}
return result;
}
var a = [
["a", 33],
["h\u016B", 44],
["s\u00EF", 51]
];
var i;
for (i=0;i<a.length;i++) {
document.write(unicodeLiteral(a[i][0]) + "<br />");
}
Результат
a
h\u016B
s\u00EF
JSFiddle
Ответ 2
javascript string.charCodeAt()
должен помочь. То есть.
"test".charCodeAt(0)
вернет числовой код для "t"
.
Кроме того, вам нужно написать оператор if, чтобы проверить, не является ли символ не ASCII и т.д.
Ответ 3
если у вас есть unicode char, и вы хотите, чтобы это как строка, вы можете сделать это
x = "h\u016B";
// here the unicode is the second char
uniChar = x.charCodeAt(1).toString(16); // 16b
uniChar = uniChar.toUpperCase(); // it is now 16B
uniChar = "\\u0" + uniChar; // it is now \\u016B
x = x.charAt(0) + uniChar; // x = "h\\u016B" which prints as you wish
Ответ 4
Итак, вот здесь попытался ответить на этот вопрос: Javascript: отображать unicode как есть, но он был закрыт из-за этого вопроса здесь.
Еще один ответ на эту проблему:
Также возможно (по крайней мере в некоторых современных браузерах) использовать String.raw - function
Синтаксис выглядит следующим образом:
var rawStr = String.raw`Hello \u0153`;
Вот рабочая скрипка (Chrome, FF): http://jsfiddle.net/w9L6qgt6/1/