5

「ä」などの特殊文字を、応答する Unicode (例: \u00e4) にエスケープするメソッドを書きたかったのです。

何らかの理由で、JS は「ä」を内部に保存することさえせずに「üã」またはその他の文字化けを使用するのが面白いと判断したため、変換すると「\u00c3\u00b6\u00c3\u002013」が吐き出されます。 「あ」。

HTML ファイルのエンコーディングを utf-8 に設定しようとしましたが、スクリプトを charset="UTF-8" でロードしようとしましたが、役に立ちませんでした。このコードは特別なことは何もしていませんが、次のとおりです。

String.prototype.replaceWithUtf8 = function() {
    var str_newString = '';
    var str_procString = this;

    for (var i = 0; i < str_procString.length; i++) {
        if (str_procString.charCodeAt(i) > 126) {
            var hex_uniCode = '\\u00' + str_procString.charCodeAt(i).toString(16);
            console.log(hex_uniCode + " (" + str_procString.charAt(i) + ")");
            str_newString += hex_uniCode;
        } else {
            str_newString += str_procString.charAt(i);
        }
    }
    return str_newString;
}
var str_item = "Lärm, Lichter, Lücken, Löcher."

console.log(str_item); // Lärm, Lichter, Lücken, Löcher. 
console.log(str_item.replaceWithUtf8()); //L\u00c3\u00a4rm, Lichter, L\u00c3\u00bccken, L\u00c3\u00b6cher. 
4

3 に答える 3

3

方法や理由はわかりませんが、サーバーを再起動したところ、正しく表示されています。フォローアップするには; 興味のあるすべての人のためのコードは次のとおりです。

String.prototype.replaceWithUtf8 = function() {
    var str_newString = '';
    var str_procString = this;
    var arr_replace = new Array('/', '"');
    var arr_replaceWith = new Array('\\/', '\\"');

    for (var i = 0; i < str_procString.length; i++) {
        var int_charCode = str_procString.charCodeAt(i);
        var cha_charAt = str_procString.charAt(i);
        var int_chrIndex = arr_replace.indexOf(cha_charAt);

        if (int_chrIndex > -1) {
            console.log(arr_replaceWith[int_chrIndex]);
            str_newString += arr_replaceWith[int_chrIndex];
        } else {
            if (int_charCode > 126 && int_charCode < 65536) {
                var hex_uniCode = '\\u' + ("000" + int_charCode.toString(16)).substr(-4);
                console.log(hex_uniCode + " (" + cha_charAt + ")");
                str_newString += hex_uniCode;
            } else {
                str_newString += cha_charAt;
            }
        }
    }
    return str_newString;
}
于 2012-11-06T12:03:51.183 に答える
2

代わりに使用'\\u' + ('000' + str_procString.charCodeAt(i).toString(16) ).stubstr(-4);して、正しいエスケープ シーケンスを取得し00ます。また、for ループで文字列を処理する代わりに、.replace()より高速になる可能性があります。

あなたの質問について:

console.log("Lärm, Lichter, Lücken, Löcher."); // Lärm, Lichter, Lücken, Löcher.

正しいエンコーディングでファイルを実際に送信したため、聞こえません。すでに正しく保存されている場合は、サーバーの問題でもある可能性があります。

于 2012-11-06T12:10:58.527 に答える