JS汉字编码 (ascii,unicode)的转换与反转

Stella981
• 阅读 1035
ASCII就是编码英文的26个字母和一些常见的符号,之后扩展了一半。总之是一个字节来做编码,大于128的部分是一些特殊符号。但ASCII是无法编码别的东西的,比如说是不存在“中文的ascii码需要2个字符”这种说法的。ASCII就只有一个字节。 
Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包括了。Unicode本身是只有2个字节的,之所以出现UTF-8,UTF-16等等之类,那是为了针对不同的应用环境,提高整体编码效率,比如如果某篇文章里绝大部分是英语(单字节就能表示),就比较适合使用utf-8,而如果绝大部分是中文(需要双字节),可能就utf-16比较合适了

下面贴出用JavaScript对汉字进行转换的程序,在第一个框里输入汉字,点Convert,或在第一个框里输入转换后的汉字的编码,点Reconvert。


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.btn{
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #666666;
text-align: left;
text-decoration: none;
display: block;
overflow: visible;
margin-right: 10px;
margin-left: 10px;
}
.btn a:hover {
background-color: #d8dfea;
border-top-width: 1px;
border-bottom-width: 1px;
border-top-style: solid;
border-bottom-style: solid;
border-top-color: #333366;
border-bottom-color: #333366;
}
.btn a {
display: block;
text-decoration: none;
color: #666666;
border-top-width: 1px;
border-bottom-width: 1px;
border-top-style: solid;
border-bottom-style: solid;
border-top-color: #CCCCCC;
border-bottom-color: #CCCCCC;
width: 100px;
padding-top: 5px;
padding-right: 10px;
padding-bottom: 5px;
padding-left: 30px;
overflow: visible;
float: left;
}
html {
font-family: Verdana, Arial, Helvetica, sans-serif;
font-size: 12px;
color: #333333;
line-height: 18px;
margin: 0px;
}
-->
body{
margin:0px;
}
</style>
</head>
<body>
<p>
   <textarea name="source" rows="14" id="source" style="width:99%">中华人民共和国万岁
中華人民共和國萬歲
\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\u4E07\u5C81
\u4E2D\u83EF\u4EBA\u6C11\u5171\u548C\u570B\u842C\u6B72
</textarea>
</p>
<div class="btn">
   <a href="javascript:action('CONVERT_FMT1')">
   <strong>Convert</strong><br />
   Fmort &amp;#xxxx   </a></div>
<div class="btn">
   <a href="javascript:action('CONVERT_FMT2')">
   <strong>Convert</strong><br />
Fmort \uxxxx
   </a> 
</div>
<div class="btn">
   <a href="javascript:action('RECONVERT')">
   <strong>ReConvert</strong><br />
To &#27721;&#23383; </a> 
</div>
<p>
<div id="tt" style="display:none"></div>
   <textarea name="show2" rows="14" id="show2" style="width:99%"></textarea>
</p>
</body>
</html>
<script language="javascript" type="text/javascript">
var oSource = document.getElementById("source");
var oShow2 = document.getElementById("show2");
var oTt = document.getElementById("tt");
function action(pChoice){
switch(pChoice){
   case "CONVERT_FMT1":
    oShow2.value = ascii(oSource.value);
    break;
   case "CONVERT_FMT2":
    oShow2.value = unicode(oSource.value);
    break;
   case "RECONVERT":
    oShow2.value = reconvert(oSource.value);
    break;
}
}
function ascii(str){
return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"\&#x$2;")});
}
function unicode(str){
return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,"\\u$2")});
}
function reconvert(str){ 
str = str.replace(/(\\u\w{4})/gi,function($0){
             return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{4})/g,"$2")),16)));
             });
            
str = str.replace(/(&#x)(\w{4});/gi,function($0){
             return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{4})(%3B)/g,"$2"),16));
             });            
return str;
}
</script>
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
CentOS7设置中文字符集
一、字符编码和字符集1、字符编码(characterencoding):字符编码是一种法则,在数字与符号之间建立的对应关系。不同的国家有不同的语言,包含的文字、标点符号、图形符号各有不同。例如在ASCII编码中,用数字97表达字符'a'与字符集相对应,常见的字符编码有AS
Stella981 Stella981
3年前
Python字符和字符值(ASCII或Unicode码值)转换方法
Python字符和字符值(ASCII或Unicode码值)转换方法(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cda.cn%2Fview%2F25016.html)这篇文章主要介绍了Python字符和字符值(ASCII或Unicode码值)转换方法,即把字符串在A
Stella981 Stella981
3年前
JavaScript用btoa和atob来编码解码Base64
btoa和atob是window对象的两个函数,其中btoa是binarytoascii,用于将binary的数据用ascii码表示,即Base64的编码过程,而atob则是asciitobinary,用于将ascii码解析成binary数据,看一个例子://Definethestringvarstring'Hel
Wesley13 Wesley13
3年前
JS转码与解码
escape和unescapeescape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。采用unicode字符集对指定的字符串除0255以外进行编码。所有的空格符、标点符号、特殊字符以及更多有联系非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表
Stella981 Stella981
3年前
Python2.x的编码问题
1\.计算机编码历史ASCIIPython的默认编码,其是一种单字节的编码。刚开始计算机世界里只有英文,而单字节可以表示256个不同的字符。最开始ASCII只定义了128个字符编码,包括96个文字和32个控制符号,因此ASCII只使用了一个字节的后7位,最高位都为0。每个字符和ASCII码的对应关系可以查看下图:!image_1
Wesley13 Wesley13
3年前
utf8编码
utf8编码关于编码问题:首先需要知道什么是编码为什么要编码,计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来,但是表示的方法不唯一;例如英文字符就那么点所以一个字节也就是8个二进制位就能给所有的进行编码,最多能给256个符号编码;但是ASCII编码实际只使用了
显示方框和带√的方框和修改导出excel名称
皕杰报表单元格内显示方框和带对勾的方框char()函数小方框:char(9744)小方框加对勾号:char(9745)函数说明:根据给定的unicode编码或者ascii码取得其对应的字符(一般来说,英文字符及其扩展字符都是ascii