javascript中怎么对已经编码的字符串解码?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javascript中怎么对已经编码的字符串解码?相关的知识,希望对你有一定的参考价值。

java中有一个字符串 msg:<p><span style="color:#ff57ac;"><strong>会读书胆红素</strong></span></p>,然后我用URLEncoder.encode(msg, "utf-8")对其进行了编码,怎么才能在javscript中把他还原回来呢?

我用过一个decodeURIComponent方法,但是用这个方法解码后,原来msg中所有的空格都变成了+。
还有别的方法吗?
其实就是这个问题:
在java里:String str = URLEncoder.encode("游客说: desa", "utf-8");
System.out.println(str);
输出的是:%E6%B8%B8%E5%AE%A2%E8%AF%B4%EF%BC%9A+desa

而在javascript中:
var de = decodeURI("%E6%B8%B8%E5%AE%A2%E8%AF%B4%EF%BC%9A+desa");
alert(de);

弹出的是:游客说:+desa
并不能完全的转换回去,在有中文标点的时候就会有问题,怎么解决这个问题?
好像在有<,>,""的时候也有问题。
在服务器端用java编码,客户端js解码。。。

如果你是用escape编码的,就用unescape()
如果你是用URLEncoder.encode()编码的,就用decodeURI() 解码。
参考技术A javascript
用 var str = encodeURIComponent("游客说: desa") 编码
用 decodeURIComponent(str) 解码
参考技术B javascript是escape和unescape方法 参考技术C 可以使用原生的javascript代码来进行转义。该编码其实不是utf8,而是unicode编码。这里的字符实际上是html实体。

JavaScript URI 编码与解码

encodeURI()和 encodeURIComponent()

encodeURI()和 encodeURIComponent()方法可以对 URI进行编码,以便发送给浏览器。有效的 URI 中不能包含某些字符,例如空格。而这两个 URI 编码方法就可以对 URI 进行编码,它们用特殊的 UTF-8 编码替换所有无效的字符,从而让浏览器能够接受和理解。

encodeURI()主要用于整个 URI进行编码

encodeURI()不会对本身属于 URI 的特殊字符进行编码,例如冒号、正斜杠、问号和井字号;
encodeURIComponent())主要用于对 URI 中的某一段进行编码
encodeURIComponent()会对它发现的任何非标准字符进行编码**

var uri = "http://www.wrox.com/illegal value.htm#start"; 
console.log(encodeURI(uri)); 
//"http://www.wrox.com/illegal%20value.htm#start" 
//除了空格之外的其他字符都原封不动,只有空格被替换成了%20
console.log(encodeURIComponent(uri)); 
//"http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start" 
//使用对应的编码替换所有非字母数字字符

decodeURI()和decodeURIComponent()

与 encodeURI()和 encodeURIComponent()方法对应的两个方法分别是 decodeURI()和decodeURIComponent()。其中,decodeURI()只能对使用 encodeURI()替换的字符进行解码。例如,它可将%20 替换成一个空格,但不会对%23 作任何处理,因为%23 表示井字号(#),而井字号不是使用
encodeURI()替换的。同样地,decodeURIComponent()能够解码使用encodeURIComponent()编码的所有字符,即它可以解码任何特殊字符的编码。

var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"; 
console.log(decodeURI(uri)); 
//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
//只有%20 被替换成了空格
console.log(decodeURIComponent(uri));
//http://www.wrox.com/illegal value.htm#start
//所有特殊字符的编码都被替换成了原来的字符,得到了一个未经转义的字符串(但这个字符串并不是一个有效的 URI)。

以上是关于javascript中怎么对已经编码的字符串解码?的主要内容,如果未能解决你的问题,请参考以下文章

javascript中可用的编码解码函数

JavaScript如何对后台utf8编码的字符串解码?

JavaScript URI 编码与解码

JavaScript对浏览器的URL进行编码解码

如何在javascript中编码/解码ascii85

什么是URL编码和URL解码?