在前端转码
var v = "我是中国人";
//转码
encodeURI(v)或 encodeURI(encodeURI(v));
//或使用
encodeURIComponent(v) 或 encodeURIComponent(encodeURIComponent(v));
//解码
decodeURI();
在后端解码
String dsname = URLDecoder.decode(request.getParameter("dsname"),"utf-8");
疑问:为什么在前端转码时 需要转两次?
答:因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的 Ascii 字符串。(这里把编第一次的结果叫成 [STR_ENC1] 好了。[STR_ENC1] 是不带有多字节字符的)再编一次后,提交,接收时容器自动解一次(容器自动解的这一次,不管是按 GBK 还是 UTF-8 还是 ISO-8859-1 都好,都能够正确的得到 [STR_ENC1])。然后,再在程序中实现一次 decodeURIComponent (Java中通常使用 java.NET.URLDecoder(***, "UTF-8")) 就可以得到想提交的参数的原值。