字符 和 字符编码 的相互转换

想必大家都知道,使用中文进行编程,总逃不开一个“字符编码”的问题。

 在储存的时候,编码不对就变成乱码,乱码一处理不好还会产生不可逆的结果。

 在传输和解析的时候,编码不对也会导致处理出错。

 

在web方面,HTML、CSS、JavaScript 都或多或少地会碰到这类问题,解决这类问题我们可能会用到JavaScript里的3个方法:

  1,String.fromCharCode( 字符编码num ),传入字符的Unicode编码,得到字符。可传入多个,用","号隔开。

  2,字符串.charCodeAt( 字符下标 ),指定字符串下标,得到下标所指字符的Unicode编码,返回10进制的编码(num类型)。

  3,escape( 字符串str ),跟第2条一样,也能把字符转换成字符编码,不同的是这里可以一次性转换多个字符,并返回16进制的编码(str类型)。

  利用这三个方法可以解决字符和字符编码的转换(主要是 汉字和Unicode 的转换,最常用的也是这两个)。

 

  HTML

    里最典型的就是:左右尖括号(<, >)、不间断空格、单双引号(', ") 、& © 等字符的使用

    在使用的时候我们必须记住:<要写成&lt;、>要写成&gt;、不间断空格则要写成&nbsp;  ......

    如果记不住呢?只能查,上网找表查。。。

    其实大可不必这么麻烦,要知道,HTML支持对字符编码的解析,如:<对应的是&#60;、>对应的是&#61;

    其中60和61指的是这个字符在Unicode中的编码,通过使用上面的方法:

      "<".charCodeAt(0);    // 返回 60,相应的 &#60; 代表 <

      "©".charCodeAt(0);    // 返回 169,说明 &#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(/%u/g, "\\u").replace(/%/g, "\\x") );
    } else {
        alert( "请输入一个或多个字符,如\"宋体\"." );
    }
}

toUnicode( "?" );          // 把?号替换成要转换的汉字,运行。

    反过来,如果我们在查看源文件的时候看到了类似:

      body {font-family: "\u5B8B\u4F53";}

    之类的写法,我们也可以讲Unicode码翻译成汉字。操作更简单:

      直接打开浏览器,F12。输入 alert("\u5B8B\u4F53"); 并运行,浏览器就会跳出提示“宋体”。

 

  JavaScript

    js的字符串已经足够强大,对于汉字可以直接写成 "这是汉字",已经足以应付大多数情况。

    但js里还有用于表示特殊字符的“转义字符”,如\n。另外还有 \x?? 用来表示ASCII码字符,\u???? 用来表示Unicode码字符。

    具体的转换我也不重复说了,平时能用到的主要就是 汉字 和 Unicode 的相互转换,上面已经讲过。JavaScript的转换方法跟CSS也是一致。

    唯一需要注意的就是:

      如果结果不正确,请确认格式正确和进制一致。

    

posted @ 2014-08-05 03:26  Huang.S  阅读(2547)  评论(0编辑  收藏  举报