如何在Javascript中打印文本unicode字符串?

如何在Javascript中打印文本unicode字符串?,javascript,unicode,character,unicode-literals,Javascript,Unicode,Character,Unicode Literals,我有一个数组,其中包含带有特殊unicode字符的字符串: 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\u016B s\u00EF ... 如何在Javascript中实现这一点?

我有一个数组,其中包含带有特殊unicode字符的字符串:

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\u016B
s\u00EF
...

如何在Javascript中实现这一点?

Javascript的
string.charCodeAt()
应该会有所帮助。即

“test”。charCodeAt(0)
将返回
“t”
的数字代码

除此之外,您还需要编写一个if语句来检查字符是否为非ASCII字符,等等。

类似这样的内容

/* 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 />");
}
/*创建一个大写十六进制数,其中至少包含给定数字的长度数字*/
函数固定十六进制(数字、长度){
var str=number.toString(16.toUpperCase();
while(str.length126 | | str.charCodeAt(i)<32)
结果+=“\\u”+固定十六进制(str.charCodeAt(i),4);
其他的
结果+=str[i];
}
返回结果;
}
变量a=[
[“a”,33],
[“h\u016B”,44],
[“s\u00EF”,51]
];
var i;

对于(i=0;i

),如果您有一个unicode字符,并且希望将其作为字符串,则可以这样做

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

所以,Get在这里试图回答这个问题:但是因为这个问题,它已经关闭了

这只是这个问题的另一个答案: 也可以(至少在一些现代浏览器中)使用-函数

语法如下:

var rawStr = String.raw`Hello \u0153`;

这里有一个工作小提琴(Chrome,FF):

好的解决方案,但我认为应该是
if(str.charcode at(I)
(ASCII在0x7F处停止)。@dda:Doh,确实如此。但是
0x7F
是DEL,因此
0x7E
应该是更好的上限。编辑我的答案,感谢备注:)。这不会显示unicode,如\u0050(这是一个有效的ascii字符)。如何处理?@gaurav5430,这在原始问题中不适用。如果
,请删除
。请注意
'\u0050'
“P”
具有相同的表示形式;您无法检查
“P”
最初是
'\u0050'
@Zeta如果我删除if,它会将所有内容转换为unicode
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
var rawStr = String.raw`Hello \u0153`;