javascript &#x,&#,\x,% 与中文的编码转换
𣇉 是两个unicode “\uD84C\uDDC9”
1、js提供的函数
用console.log输出
1.1 unicode编码
escape("中文") => "%u4E2D%u6587"
"中".charCodeAt(0).toString(16) =>"4e2d"
"文".charCodeAt().toString(16) =>"6587"
String.fromCharCode(0x4e2d) =>"中"
String.fromCharCode(55372,56777) =>"𣇉" =>escape("𣇉")=>"%uD84C%uDDC9" =>"\uD84C\uDDC9"
用两个unicode表示一个汉字 “𣇉”
1.2 utf-8编码
encodeURI("中文") => "%E4%B8%AD%E6%96%87"
1.3 进制方法
Number("0xE4") => 228=>0xE4
Number(228).toString(16) => "e4"
escape("\x61") => "a"
"a".charCodeAt(0) => 97
"a".charCodeAt(0).toString(16) => "61"
1.4 编码方法
escape("&") => %26
unescape("%26123") -> &123
escape("确")->"%u786E"
unescape(%u786E) ->确
encodeURI方法不会对下列字符编码 ASCII字母 数字 ~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母 数字 ~!*()'
encodeURI("https://blog.csdn.net/hvang1988?a =&")
=>"https://blog.csdn.net/hvang1988?a%20=&";
encodeURIComponent("https://blog.csdn.net/hvang1988?a =&")
=>"https%3A%2F%2Fblog.csdn.net%2Fhvang1988%3Fa%20%3D%26"
var a=encodeURI("a=b");
console.log(a)
a=encodeURIComponent("a=b");
console.log(a);
1.4 补充
&#后跟unicode 十进制
&#x 后跟的是unicode 十六进制
% 后跟16进制 比如escape("&") 为%26 而&的ascii为36
2、中文 和 &#x 互转
中文 在html标签中会自动编码为汉字,和 类似
2.1 中文 转 &#x
过程:
中文=>escape("中文") => "%u4E2D%u6587" =>
把%u替换成 &#x即可 ,因为后边跟的都是十六进制=> "中文"
js实现:
function code(str) {
var result = "";
for (var i = 0; i < str.length; i++) {
result += "&#x" + str.charCodeAt(i).toString(16)+";";
}
return result;
}
console.log(code("中文"));
2.2 &#x 转中文
过程:
中文 => &#x替换为%u =>
%u4E2D%u6587 =>unescape("%u4E2D%u6587") =>中文
js实现:
3、中文和 &# 互转
使用 .charCodeAt可以获取unicode码
tip:�� 在html标签中会自动编码为汉字,和 类似
在线互转(Unicode和ASCII):http://tool.chinaz.com/tools/unicode.aspx
3.1 中文转 &#
过程:
中文
=>找到unicode十进制再前缀&#即可
=>"&#"+"中".charCodeAt(0)+";"+"&#"+"文".charCodeAt(0) +";"
=>"中文"
js实现:
function code(str) {
var result = "";
for (var i = 0; i < str.length; i++) {
result += "&#" + str.charCodeAt(i)+";";
}
return result;
}
console.log(code("中文"))
3.2 &# 转 中文
过程:
中文
=> 去除unicode [20013,25991]
=>把字节编码为字符集汉字(utf8)
=>中文
js实现:
function code(str) {
var arry = str.match(/&#(\d+);/g);
var result = "";
for (var i = 0; i < arry.length; i++) {
result += String.fromCharCode(arry[i].replace(/[&#;]/g, ''))
}
return result;
}
console.log(code(x))
String.fromCharCode(55372,56777)
String.fromCharCode(55372,56777,20013,25991)
4 中文 和 \x 互转
encodeURI会进行utf8按字节编码,比如
encodeURI(“𣇉”) =>"%F0%A3%87%89" 和\x也是按字节 异曲同工。
4.1 中文 转 \x
过程:
encodeURI("中文") => "%E4%B8%AD%E6%96%87" => %替换为\x=> \xE4\xB8\xAD\xE6\x96\x87
补充:\x一般是其他程序产生,而不是js
js实现:
function code(str) {
return encodeURI(str).replace(/%/g,"\\x");
}
var x="中文";
console.log(code(x));
4.2 \x 转 中文
过程:
\xE4\xB8\xAD\xE6\x96\x87=>替换\x为% =>%E4%B8%AD%E6%96%87
=>decodeURI("%E4%B8%AD%E6%96%87") => 中文
js实现:
function code(str) {
return decodeURI(str.replace(/\\x/g,"%"));
}
var x="\\xE4\\xB8\\xAD\\xE6\\x96\\x87";
console.log(code(x));
5、中文和unicode 互转
使用escape和unescape 进行unicode 转码
在线互转(中文和unicode):https://www.bejson.com/convert/unicode_chinese/
5.1 中文转unicode
过程 :
escape("中文") => "%u4E2D%u6587" =>替换%为\u即可=>"\u4E2D\u6587"
js实现:
function code(str) {
var result="";
for (var i = 0; i < str.length; i++) {
var tmp="00" + str.charCodeAt(i).toString(16);
result+="\\u"+tmp.slice(-4);
}
return result;
}
console.log(code("中文"));
5.2 unicode转中文
过程 :
js中识别unicode
比如var a="\u4e2d\u6587" //a就是中文
"\\u4e2d\\u6587"
=>"%u4e2d%u6587"
=>unescape("%u4e2d%u6587")
=>中文
js实现:
function code2(str) {
var b=str.replace(/\\/g,"%");
console.log(b)
return unescape(b);
}
console.log(code2("\\u4e2d\\u6587"));
|