Javascript字符编码
引发的疑问
最近工作需要研究了qq web统一登陆的自动化。在一个接口中,看到这样的jsonp返回数据:1ptui_checkVC('0','!YAO','\x2c\x99\xd1\x52\xaa\x4f\x79\xad','454301401b2d23abdab402df0c3b01a2d9952fba2ef9638fd60b82bdbbed85defecef907aea290714d62f3098e6ed63bee77fda7acb5372b','3');
这种\xXXX的字符表示方式从没见过,只听说过\u的unicode字符表示,所以查了下,顺便记录下来。
javascript表示字符的六种方式
|
|
对于’\x’mdn说是拉丁字符表示,实际就是用单字节8位两个16进制数来表示。所以在ascii码中的字符才能使用\x这种十六进制表示方法。汉字是不行的。
unicode统一字符集是使用最广泛也是最普遍的,我们熟悉的utf-8,utf-16,utf-32都属于其中。而javascript由于设计时这些编码集还未出现,所以使用的是UCS-2字符集,造成所有字符在这门语言中都是2个字节,如果是4个字节的字符,会当作两个双字节的字符处理。
这两篇博客写的比较详细:
- http://www.ruanyifeng.com/blog/2014/12/unicode.html
- https://mathiasbynens.be/notes/javascript-escapes
总的来说,es6及其之后javascript同时支持UCS-2码点和utf-16码点。可以开始处理4字节长度的码点