我想编写一种方法来将特殊字符转换为响应的Unicode(例如\ u00e4)。
由于某种原因,JS发现在内部甚至没有保存'ä'但使用'ü'或其他一些乱码很有趣,所以当我转换它时会吐出'\ u00c3 \ u00c3 \ u00c3 \ u002013',因为它会转换这些chars而不是'ä'。
我已经尝试将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.
答案 0 :(得分:2)
我不知道如何或为什么但我只是重新启动服务器,现在它正确显示。去跟随;这是所有感兴趣的人的代码:
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;
}
答案 1 :(得分: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.
没声音,因为您确实使用正确的编码发送了文件。如果已经正确保存,也可能是服务器问题。
答案 2 :(得分:0)
String.prototype.replaceWithUtf8 = function() {
function r(r) {
for (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);
return e;
}
var a, c, o, u, s, e = "", i = this, t = [ "/", '"' ], n = [ "\\/", '\\"' ];
for (a = 0; a < i.length; a++) c = i.charCodeAt(a), o = i.charAt(a), u = t.indexOf(o),
u > -1 ? e += n[u] :c > 126 && 65536 > c ? (s = r(o), e += s) :e += o;
return e;
};
prompt("Your escaped string:","Lärm, Lichter, Lücken, Löcher.".replaceWithUtf8());
alert("L\xe4rm, Lichter, L\xfccken, L\xf6cher.");
&#13;
Unicode编码仅使每个字符为6位数。但是对于127到256以上的字符,我们实际上可以用较少的字节(每个字符4位)来制作这些十六进制数。