使用特殊字符的JavaScript编码

使用特殊字符的JavaScript编码,javascript,encoding,utf-8,Javascript,Encoding,Utf 8,我想编写一个方法,将特殊字符(如“ä”)转义到相应的Unicode(例如.\u00e4) 出于某种原因,JS甚至不在内部保存“ä”,而是使用“üÜ”或其他一些乱码,这很有趣,所以当我转换时,它会吐出“\u00c3\u00b6\u00c3\u002013”,因为它转换这些字符而不是“ä” 我已尝试将HTML文件的编码设置为utf-8,并尝试使用charset=“utf-8”加载脚本,但没有效果。代码实际上没有做任何特殊的事情,但它是: String.prototype.replaceWithU

我想编写一个方法,将特殊字符(如“ä”)转义到相应的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. 
String.prototype.replaceWithUtf8=函数(){
var str_newString='';
var str_procString=this;
对于(var i=0;i126){
var hex_uniCode='\\u00'+str_procString.charCodeAt(i).toString(16);
log(十六进制uniCode+”(“+str_procString.charAt(i)+”);
str_newString+=hex_uniCode;
}否则{
str_newString+=str_procString.charAt(i);
}
}
返回stru新闻字符串;
}
var str_item=“Lärm,Lichter,Lücken,Löcher。”
console.log(str_项);//LÃrm,利希特,Lücken,LÃcker。
log(str_item.replaceWithUtf8())//L\u00c3\u00a4rm,利希特,L\u00c3\u00bccken,L\u00c3\u00b6cher。

我不知道如何或为什么,但我刚刚重新启动了服务器,现在它显示正确。跟进;下面是每个感兴趣的人的代码:

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;
}
String.prototype.replaceWithUtf8=函数(){
var str_newString='';
var str_procString=this;
var arr_replace=新数组(“/”,““”);
var arr\u replaceWith=新数组(“\\/”,“\\”);
对于(var i=0;i-1){
log(arr_replace为[int_chridex]);
str_newString+=arr_replace with[int_chridex];
}否则{
if(int_charCode>126&&int_charCode<65536){
var hex_uniCode='\\u'+(“000”+int_charCode.toString(16)).substr(-4);
log(十六进制uniCode+”(“+cha_charAt+”);
str_newString+=hex_uniCode;
}否则{
str_newString+=cha_charAt;
}
}
}
返回stru新闻字符串;
}
使用
'\\u'+('000'+str\u 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.
听起来不像是您用正确的编码发送了文件。如果已正确保存,也可能是服务器问题。

String.prototype.replaceWithUtf8=函数(){
函数r(r){
对于(var t,n,e=),i=0;!isNaN(t=r.charCodeAt(i++);)n=t.toString(16),
e+=256>t?\\x“+(t>15?”:“0”)+n:“\\u”+(“0000”+n).slice(-4);
返回e;
}
变量a,c,o,u,s,e=“”,i=this,t=[“/”,“““”],n=[“\\/”,“\\”];
对于(a=0;a-1?e+=n[u]:c>126&&65536>c?(s=r(o),e+=s):e+=o;
返回e;
};
提示符(“您的转义字符串:”,“Lärm,Lichter,Lücken,Löcher.”.replaceWithUtf8());

警报(“L\xe4rm、Lichter、L\xfcken、L\xf6cher”)这似乎工作正常()。你是如何在HTML上设置编码的?嘿@mihai,我在head标签中这样设置:
@mihai,在script标签中这样设置:
听起来不错……我仍然在Chrome中得到正确的结果/WinXP@mihai谢谢你的努力。我觉得自己被科技迷住了;DI遵循了本文中的转义序列和php的json_encode使用的转义序列。但是你用前缀0表达了一个伟大的观点。我需要正确解释这些,谢谢!