zoukankan      html  css  js  c++  java
  • JS 汉字与Unicode码的相互转化

    js文件中,有些变量的值可能会含有汉字,画面引入js以后,有可能会因为字符集的原因,把里面的汉字都变成乱码。后来发现网上的一些js里会把变量中的汉字都表示成”u“开头的16进制编码,这样应该可以解决上面的问题。

    最近有时间在网上查找了一下实现方式,一种比较大众化的:

    function tounicode(data)
    {
       if(data == '') return '请输入汉字';
       var str =''; 
       for(var i=0;i<data.length;i++)
       {
          str+="\u"+parseInt(data[i].charCodeAt(0),10).toString(16);
       }
       return str;
    }
    function tohanzi(data)
    {
        if(data == '') return '请输入十六进制unicode';
        data = data.split("u");
        var str ='';
        for(var i=0;i<data.length;i++)
        {
            str+=String.fromCharCode(parseInt(data[i],16).toString(10));
        }
        return str;
    }

    还找到一个相对简单一些,但比较另类的:

    var GB2312UnicodeConverter={
            ToUnicode:function(str){
              return escape(str).toLocaleLowerCase().replace(/%u/gi,'\u');
            }
            ,ToGB2312:function(str){
              return unescape(str.replace(/\u/gi,'%u'));
            }
          };

    不过都有些问题,这两种方式,都会把出汉字以外的其他字符都给转换掉,做个简单的加密解密算法还是可以的,但要是用来处理js文件,把回车、换行、空格、tab字符全换了,转完以后,js文件也没法运行了。

         偷懒不成,只能自己按照上面代码处理逻辑写一个了,只要保证只转换汉字字符就可以了:

    // 汉字转为Unicode字符码表示
          function toUnicode(s){ 
            return s.replace(/([u4E00-u9FA5]|[uFE30-uFFA0])/g,function(){
              return "\u" + RegExp["$1"].charCodeAt(0).toString(16);
            });
          }

    方法写完了,为了方便转换js文件的内容,再做个简单的页面,加一个button在画面上。先要做的是在js文件Ctr+A,Ctr+C,把内容拷贝 到剪贴板里,然后再新建的这个画面上,点button的时候,从剪贴板里把内容读出来,调用方法转一下,在把内容放回剪贴板。然后再到 js文件里Ctr+A,Ctr+V一下就可以了。代码如下:

    <html>
    <head>
        <script language="javascript">
          function Window_Load(){
             var G = document.getElementById;
             G("cmdToU").onclick = function(){ 
                 clipboardData.setData("text",toUnicode(clipboardData.getData("text")));
             } 
          } 
          // 汉字转为Unicode字符码表示
    
    // 原函数是,红色是是错误的,导致多个中文时,结果都是最后一个汉字的unicode码;
          function toUnicode(s){ 
              return s.replace(/([u4E00-u9FA5]|[uFE30-uFFA0])/g,function(){
                return "\u" + RegExp["$1"].charCodeAt(0).toString(16);
              });
          } 
        
    // 经@b4b4指正,现更改
        function toUnicode(s){ 
              return s.replace(/([u4E00-u9FA5]|[uFE30-uFFA0])/g,function(newStr){
                return "\u" + newStr.charCodeAt(0).toString(16); 
          }); 
        } 
    </script> 
    </head> <body onload="Window_Load();"> <button id="cmdToU">汉字转为Unicode</button> </body> </html>

    这个页面只能在IE内核的浏览器下才能正常运行,因为clipboardData对象好像只在IE下面有。

  • 相关阅读:
    轻重搭配
    EF的优缺点
    使用bootstrap-select有时显示“Nothing selected”
    IIS发布 HTTP 错误 500.21
    js添加的元素无法触发click事件
    sql server查看表是否死锁
    sql server把一个库表的某个字段更新到另一张表的相同字段
    SQLSERVER排查CPU占用高的情况
    SQL server中如何按照某一字段中的分割符将记录拆成多条
    LINQ to Entities does not recognize the method 'System.DateTime AddDays(Double)' method, and this method cannot be translated into a store expression.
  • 原文地址:https://www.cnblogs.com/wish123/p/6481926.html
Copyright © 2011-2022 走看看