JavaScript字符集编码与解码

一、字符集

1)字符与字节(Character)

字符是各种文字和符号的总称,包括乱码;一个字符对应1~n个字节,一字节对应8位,每位用0或1表示。

 

2)字符集(Character Set)

字符集是多个字符的集合,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、Unicode字符集等。

 

3)字符集编码(Character Encoding)

字符集编码就是将符号转换为计算机可读的二进制,解码就是把二进制转换为人类可读的符号。

字符集大多对应一种编码方式(例如GBK对应GBK编码),但Unicode编码有多种,包括UTF-8、UTF-16、UTF-32和UTF-7。

目前网页用的最多的就是“UTF-8”,UTF-8使用一至四个字节为每个字符编码,是ASCII的一个超集,所以现存的ASCII文本不需要转换

 

二、浏览器进制

1)HTML属性中使用十进制和十六进制

十进制在HTML中可使用“8”,十六进制,则使用“Z”,比十进制多了个x,进制码中也多了a~f这6个字符来表示10~15。

 

2)CSS属性中使用十进制和十六进制

CSS兼容HTML的进制形式,除此之外,十六进制还可以使用“\6c”的形式来表示。

 

3)JavaScript编码封装

可以直接通过eval执行字符串八进制和十六进制两种编码方式,其中八进制用“\56”表示,十六进制用“\x5c”表示。

如果代码中应用了汉字并且需要进行进制编码,那么只能进行十六进制Unicode编码,其表示形式为:“\u4ee3\u7801”。

在“Web前端黑客技术揭秘”中经封装了两个方法来做编码和解码,主要用到了下面两个方法,具体代码可查看此处

核心代码是:“str.charCodeAt(char).toString(进制)”与“String.fromCharCode(parseInt(code,进制))

charCodeAt() 方法返回0到65535之间的整数,表示给定索引处的UTF-16代码单元

静态String.fromCharCode() 方法返回使用指定的Unicode值序列创建的字符串。

还可以通过一个在线网页进行编码解码“MonyerJS”。

4)HTML自动解码机制

例如在网页中输入16进制的“Hello”,自动就会解码为“hello”。

还有一些比较熟知的空格“ ”也是这种机制。

 

三、浏览器编码

JavaScript中有三对可以对字符串编码解码的函数,分别是:

escape/unescape、encodeURI/decodeURI、encodeURIComponent/decodeURIComponent。

主要的区别还是不编码的字符个数。

1)escape不编码的字符有69个

*、+、-、.、/、@、_、0~9、a~z、A~Z而且escape对0~255以外的unicode值进行编码时输出%u****格式。

 

2)encodeURI不编码的字符有82个

!、#、$、&、'、(、)、*、+、,、-、.、/、:、;、=、?、@、_、~、0~9、a~z、A~Z

 

3)encodeURIComponent不编码的字符有71个

!、'、(、)、*、-、.、_、~、0~9、a~z、A~Z

 

 

 

参考资料:

字符集和字符编码(Charset & Encoding)

浏览器的进制常识

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: encodeURIComponent和decodeURIComponent是JavaScript中的两个函数,用于对URL进行编码解码。 encodeURIComponent函数将字符串作为参数,将其中的特殊字符进行编码,以便于在URL中传输。例如,空格会被编码为%20,中文字符会被编码为%XX的形式。 decodeURIComponent函数则是对已经编码的字符串进行解码,将其中的特殊字符还原为原始字符。例如,%20会被解码为空格,%XX会被解码为对应的中文字符。 在Java中,也有类似的编码解码函数,例如URLEncoder和URLDecoder。这些函数可以用于对URL进行编码解码,以便于在Java程序中进行网络传输。 ### 回答2: encodeURIComponent和decodeURIComponent是JavaScript内置的函数,用于对URL进行编码解码,其中encodeURIComponent用于将特殊字符转换为URL安全字符,而decodeURIComponent则用于将URL安全字符转换为原始字符。 在Java中,可以使用URLEncoder类和URLDecoder类来实现与JavaScript中的encodeURIComponent和decodeURIComponent函数类似的功能。URLEncoder类用于将可再UBO 中使用的字符串转换为application/x-www-form-urlencoded格式,而URLDecoder类则用于将这种格式的字符串转换回原始字符串。 示例代码如下: // 编码 String encodedStr = URLEncoder.encode("姓名:张三&年龄:20", "UTF-8"); System.out.println(encodedStr); // 输出:%E5%A7%93%E5%90%8D%EF%BC%9A%E5%BC%A0%E4%B8%89%26%E5%B9%B4%E9%BE%84%EF%BC%9A20 // 解码 String decodedStr = URLDecoder.decode("%E5%A7%93%E5%90%8D%EF%BC%9A%E5%BC%A0%E4%B8%89%26%E5%B9%B4%E9%BE%84%EF%BC%9A20", "UTF-8"); System.out.println(decodedStr); // 输出:姓名:张三&年龄:20 需要注意的是,当使用URLEncoder类进行编码时,需要指定编码字符集(比如UTF-8),否则可能导致乱码问题。而在解码时,不仅需要指定字符集,还需要考虑URL的合法性,如果存在非法字符(比如空格等),则可能会抛出异常。因此,在使用时需要仔细阅读相关文档并进行测试。 ### 回答3: encodeURIComponent和decodeURIComponent是JavaScript中的两个函数,用于将字符串进行编码解码。其中encodeURIComponent是对传入的字符串进行URL编码,将字符串中的特殊符号转义,以便于在URL中使用,而decodeURIComponent则是对URL编码后的字符串进行解码,还原出原始字符串。 在Java中,可以通过使用java.net包中的URLEncoder和URLDecoder类来实现类似的功能。URLEncoder类可以使用encoding参数来指定编码方式,默认为UTF-8。它的encode方法可以将字符串进行URL编码,而decode方法则是对URL编码的字符串进行解码。以下是一个使用URLEncoder和URLDecoder的简单例子: ``` import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.net.URLEncoder; public class Main { public static void main(String[] args) { String url = "https://www.example.com/?name=张三&age=18"; try { // 对url进行编码 String encodedUrl = URLEncoder.encode(url, "UTF-8"); System.out.println("Encoded url: " + encodedUrl); // 对编码后的url进行解码 String decodedUrl = URLDecoder.decode(encodedUrl, "UTF-8"); System.out.println("Decoded url: " + decodedUrl); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } ``` 此例中,URLEncoder将url进行了编码,得到了一个包含特殊字符的字符串,而URLDecoder则将其解码还原出原始字符串。需要注意的是,URL编码后的字符串在URL中使用时需要使用%20等编码字符代替空格等特殊字符,否则可能导致网页无法正常访问。因此,在使用URL编码前需要了解编码格式和要编码的内容,以免出现意外情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值