JS中的编码问题
2014-01-04 17:27
183 查看
一、外部引入JS文件
如果在一个单独的JS文件中包含字符串输入的情况,如:
二、JS的URL编码
通过JS异步调用的URL默认编码也是受浏览器影响的,如使用原始Ajax的http_request.open('GET',url,true)调用,URL的编码在IE下是操作系统的默认编码,而在Firefox下则是UTF-8编码。
实际上JS中处理URL编码有三个函数。
1、escape()
这个函数是将ASCII字母、数字、标点符号(*+-./@_)以外的其他所有字符转化成Unicode编码值,并且在编码值前加上“%u”。解码可以通过unescape()函数。如:
2、encodeURI()
与escape()相比,encodeURI()是真正的JS用来对URL编码的函数,它可以将整个URL中的字符(除了一些特殊字符,如!#$&'()*+,-./:;=?@_~0-9a-zA-Z)进行UTF-8编码,在每个码值前加上“%”。
相对的,解码通过decodeURI函数来实现。
3、encodeURIComponent()
encodeURIComponent()这个函数比encodeURI()编码还要彻底,它除了对!'()*-._~0-9a-zA-Z这几个字符不编码外,其他所有字符都编码,这个函数通常用于将一个URL当作一个参数放在另一个URL中。
相对的,解码通过decodeURIComponent()来实现。
4、Java与JS编解码问题
我们知道,Java端处理URL编解码有两个类,java.net.URLEncoder和java.net.URLDecoder。这两个类可以将所有“%”加UTF-8码值用UTF-8解码,从而得到原始字符。
Java端的URLEncoder和URLDecoder与前段JS对应的是encodeURIComponent和decodeURIComponent。
注:如果JS端用encodeURIComponent编码后,Java端用URLDecoder解码可能出现乱码,一定是两个字符编码类型不一致导致的;可以用encodeURIComponent两次编码来解决。
三、其他需要编码的地方
除了URL和参数编码外,在服务端还有很多地方可能存在编码,如可能需要读取XML、Velocity模板引擎、JSP或者数据库等等。
XML设置编码格式:
Velocity模板引擎设置编码格式:
JSP设置编码格式:
如果在一个单独的JS文件中包含字符串输入的情况,如:
<html> <head> <script src="../js/script.js" charset="gbk"></script>引入一个script.js脚本,这个脚本中有如下代码:
document.write("这是一段中文");这时如果script没有设置charset,浏览器就会以当前这个页面的默认字符集来解析这个JS文件,如果JS文件的编码格式和当前页面的编码格式一致,则可以不用设置charset;如果不一致的话,不设置charset,上面那段中文就会变成乱码。
二、JS的URL编码
通过JS异步调用的URL默认编码也是受浏览器影响的,如使用原始Ajax的http_request.open('GET',url,true)调用,URL的编码在IE下是操作系统的默认编码,而在Firefox下则是UTF-8编码。
实际上JS中处理URL编码有三个函数。
1、escape()
这个函数是将ASCII字母、数字、标点符号(*+-./@_)以外的其他所有字符转化成Unicode编码值,并且在编码值前加上“%u”。解码可以通过unescape()函数。如:
escape("I am 君山"); //结果如下 "I%20am%20%u541B%u5C71" unescape("I%20am%20%u541B%u5C71"); //结果如下 "I am 君山"注:escape()和unescape()已经从ECMAScript v3 标准中删除了,URL的编码可以用encodeURI和encodeURIComponent来代替。
2、encodeURI()
与escape()相比,encodeURI()是真正的JS用来对URL编码的函数,它可以将整个URL中的字符(除了一些特殊字符,如!#$&'()*+,-./:;=?@_~0-9a-zA-Z)进行UTF-8编码,在每个码值前加上“%”。
相对的,解码通过decodeURI函数来实现。
3、encodeURIComponent()
encodeURIComponent()这个函数比encodeURI()编码还要彻底,它除了对!'()*-._~0-9a-zA-Z这几个字符不编码外,其他所有字符都编码,这个函数通常用于将一个URL当作一个参数放在另一个URL中。
相对的,解码通过decodeURIComponent()来实现。
4、Java与JS编解码问题
我们知道,Java端处理URL编解码有两个类,java.net.URLEncoder和java.net.URLDecoder。这两个类可以将所有“%”加UTF-8码值用UTF-8解码,从而得到原始字符。
Java端的URLEncoder和URLDecoder与前段JS对应的是encodeURIComponent和decodeURIComponent。
注:如果JS端用encodeURIComponent编码后,Java端用URLDecoder解码可能出现乱码,一定是两个字符编码类型不一致导致的;可以用encodeURIComponent两次编码来解决。
三、其他需要编码的地方
除了URL和参数编码外,在服务端还有很多地方可能存在编码,如可能需要读取XML、Velocity模板引擎、JSP或者数据库等等。
XML设置编码格式:
<?xml version="1.0" encoding="UTF-8">
Velocity模板引擎设置编码格式:
services.VelocityService.input.encoding=UTF-8
JSP设置编码格式:
<%@page contentType="text/html;charset=UTF-8" %>
相关文章推荐
- Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)
- Q: jquery.tmpl.js - 变量内的html编码不能被识别的问题
- js解码和编码问题
- JS代码与页面代码编码的问题
- 同一页面引入多个JS文件的编码问题
- Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)
- asp使用js时间控件,实现下拉日历 解决UTF-8和GB2312的编码问题
- 使用Node.js处理前端代码文件的编码问题
- asp.net页面引入的js控件编码问题
- 同一页面引入多个JS文件的编码问题
- JS编码问题
- MyEclipse中 js中文乱码问题 VS MyEclipse默认编码
- java使用gbk编码读取utf-8的js文件吃掉回车问题
- 链接js文件编码问题[asp.net 2.0]
- 同一页面引入多个JS文件的编码问题
- js编码问题
- vs2003 js文件编码问题的解决方法
- 不同编码页面中调用js乱码的问题
- js编码问题(中文乱码)
- JS base64加解密解决传输的url各种编码问题