20

特殊な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ù
sô
...

そして私が欲しい:

a
h\u016B
s\u00EF
...

Javascriptでこれをどのように達成できますか?

4

4 に答える 4

20

このようなもの?

/* 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 \ u016​​B
s \ u00EF

JSFiddle

于 2012-06-07T18:13:50.397 に答える
6

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
于 2012-06-07T18:18:20.540 に答える
6

javascriptstring.charCodeAt()が役立つはずです。つまり

"test".charCodeAt(0)の数値コードを返します"t"

それ以外に、文字が非ASCIIであるかどうかを確認するためにifステートメントを作成する必要があります。

于 2012-06-07T18:02:42.157 に答える
6

それで、ここで得られたのは、この質問に答えようとしました:Javascript:ユニコードをそのまま表示しますが、ここでこの質問のために閉じられました。

この問題に対するもう1つの答え: String.raw-関数を使用することも(少なくとも一部の最新のブラウザーでは)可能です。

構文は次のようになります。

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

動作するフィドル(Chrome、FF)は次のとおりです。http://jsfiddle.net/w9L6qgt6/1/

于 2016-02-18T06:42:49.013 に答える