编码 Unicode 及其在 JavaScript 中的使用(2)

UTF-16 编码出现以前,UD800-UDFFF 区段的码位可能会被一些计算机产品设计者利用,而且其他位面的字符极少用到,因此,一些软件可能无法正确识别代理码对,这可能会导致一些BUG。例如,Python 2.6 在 UNIX 平台上便无法正确识别代理码对。如果一个软件声称自己支持UCS-2,那么他很可能是不支持UTF-16的。

javascript 跟 java 一样使用UTF-16编码,因此, 实际上 javascript 程序中变量名和函数名可以使用ASCII 之外的字符,例如中文,不过网页文件保存的编码格式要注意,使用的编码格式对字符编码的范围应当不小于 UTF-16,比如保存为 utf-8 编码。

function试试看(){

var打个招呼={你好:'好你妹!'};

alert(打个招呼.你好);

}

试试看();

二、字符编码格式及其在 javascript 中的使用 1、unicode 16进制编码

unicode 16 使用 16位二进制编码字符,但是其编码格式在书面上使用16进制(二进制写起来太长了),在javascript中, \u 加 4个16进制字符表示一个字符的编码(每个字节 8 位二进制对应2位十六进制,2^8 = 256 = 16^2),不足4位16进制的,高位用0补足,比如 \u55B5 表示汉字 "喵",字母 "a" 的 ASCII 码是10进制 97,表示成 16 进制 unicode 编码格式就是 \u0061。试试打印出来: 

document.write('\u55B5'); 

document.write('\u0061');

2、javascript charCodeAt 和 String.fromChartCode 使用 10 进制编码

在 javascript 字符串的 charCodeAt 和 String.fromChartCode 中取得和使用的字节编码都是 10 进制的,因此在 document.write 和 这些方法配合使用时需要进行进制转换。
另外要注意的是,如果一个变量保存了一个字符的 unicode() 编码,你想用 document.write() 打印到页面上就需要注意了,不要将'\u' 转义成 '\\u' ,如果转义了,需要使用 eval() 来执行,否则将直接把编码打印出来:

var code1 ='\\u0061';

document.write(code1);// \u0061

var code2 ='\u0061';

document.write(code2);// a

但是在表达式中,也许你想拼接出 unicode 编码后打印字符串,这就要注意了,因为在字符串中 \u 后面必须接 4个十六进制字符才是合法的语法,所以不得不转义:

var code ="\\u"+("0000"+('a').charCodeAt(0).toString(16)).slice(-4);

document.write(code);// \u0061

document.write(eval('"'+code+'"'));//正确做法 ,注意eval 时加上引号,因为 document.write 接受的参数是字符串,document.write("\u0061"),其中 \u0061 是单个字符,而不是可以分割的多个字符组成的字符串 ( "\\"+"u"+"0061" ), 而形如document.write(\u0061) 的语句是个语法错误.

试试下面代码

function \u0061(){ console.log(123)}

\u0061();

a();

3、javascript 中的单字节编码

在 js 中,可以使用 \x 加 2位16进制字符标记一个单字节的字符,例如字符 'a' 可以表示为 \x61,用法类似\u 加4位16进制编码。

document.write('\x61');// a

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/f33ac200134dd539ff8172ef8b300cf6.html