首页 > 代码库 > 字符 和 字符编码 的相互转换
字符 和 字符编码 的相互转换
想必大家都知道,使用中文进行编程,总逃不开一个“字符编码”的问题。
在储存的时候,编码不对就变成乱码,乱码一处理不好还会产生不可逆的结果。
在传输和解析的时候,编码不对也会导致处理出错。
在web方面,HTML、CSS、JavaScript 都或多或少地会碰到这类问题,解决这类问题我们可能会用到JavaScript里的3个方法:
1,String.fromCharCode( 字符编码num ),传入单个字符的Unicode编码,得到字符。
2,字符串.charCodeAt( 字符下标 ),指定字符串下标,得到下标所指字符的Unicode编码,返回10进制的编码(num类型)。
3,escape( 字符串str ),跟第2条一样,也能把字符转换成字符编码,不同的是这里可以一次性转换多个字符,并返回16进制的编码(str类型)。
利用这两个方法可以解决字符和字符编码的转换。
HTML
里最典型的就是:左右尖括号(<, >)、不间断空格、单双引号(‘, ") 、& © 等字符的使用
在使用的时候我们必须记住:<要写成<、>要写成>、不间断空格则要写成 ......
如果记不住呢?只能查,上网找表查。。。
其实大可不必这么麻烦,要知道,HTML支持对字符编码的解析,如:<对应的是<、>对应的是=
其中60和61指的是这个字符在Unicode中的编码,通过使用上面的方法:
"<".charCodeAt(0); // 返回 60,相应的 < 代表 <
"©".charCodeAt(0); // 返回 169,说明 © 会被HTML解析成 ©
代码如下:
function toCharCode( ch ) { // 适用于HTML,用于获取字符实体。 if( typeof ch === "string" && ch.length === 1) { alert( "字符 " + ch + " 所对应的HTML字符实体是:\n&#" + ch.charCodeAt(0) + ";" );
} else { alert( "请输入单个字符, 如\"&\"." ); }}toCharCode( "?" ); // 把?号替换成你要转换的字符,运行。
使用方法:打开浏览器,按F12,复制上面的代码并替换关键字,运行。
CSS
CSS碰到的字符编码的问题比较少,但据我所知的,下面这种情况:
body { font-family: "微软雅黑", sans-serif;}
直接使用中文会在ie6下可能会导致无效,使用英文名字又可能导致别的问题,所以最佳方案是把汉字转成Unicode码。
代码如下:
function toUnicode( str ) { // 把汉字转换成Unicode编码,适用(但不限于)CSS,JavaScript。 if ( typeof str === "string" ) { alert( "\"" + str + "\" 的Unicode编码是:\n" + escape(str).replace(/\%/g, "\\") ); } else { alert( "请输入一个或多个字符,如\"宋体\"." ); }}toUnicode( "?" ); // 把?号替换成要转换的汉字,运行。
反过来,如果我们在查看源文件的时候看到了类似:
body {font-family: "\u5B8B\u4F53";}
之类的写法,我们也可以反过来讲Unicode码翻译成汉字。操作更简单:
直接打开浏览器,F12。输入 alert("\u5B8B\u4F53"); 并运行,浏览器就会跳出提示“宋体”。
JavaScript
js的字符串已经足够强大,对于汉字可以直接写成 "这是汉字",已经足以应付大多数情况。
但js里还有用于表示特殊字符的“转义字符”,如\n。另外还有 \x?? 用来表示ASCII码字符,\u???? 用来表示Unicode码字符。
具体的转换我也不重复说了,平时能用到的主要就是 汉字 和 Unicode 的相互转换,上面已经讲过。JavaScript的转换方法跟CSS也是一致。
唯一需要注意的就是:
如果结果不正确,请确认格式和进制是否一致。