当前位置: 首页 > article >正文

js 中汉字和Unicode 互转

    首先,什么是Unicode,百科知识:Unicode(统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等;Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

 

    balabala一堆,其实可以举个例子简单的理解一下:秦国一统六国后,统一货币,度量衡等,创造一个统一的标准,所有秦的领土范围内都使用这个标准,标准统一后,各种杂七杂八混乱的问题也就随着解决了,然后走向人生巅峰,迎娶xxx云云。 。。

    Unicode也一样,它把所有的语言(中文、英文、韩文...)都纳入到一套编码中,统一所有的文字编码,这样就解决了中国用中国定制的编码,日本用日本定制的编码....这种混乱的现象,这样就不会出现乱码的现象了。Unicode中一般用两个字节(16bit)表示一个字符,就算原有的英文编码也从单字节变成了双字节,但是影响不大,把高位字节置0就完事了(如有错请帮我评论指出,谢谢!)

Unicode编码取值: 0 - 65535  (0x0000 - 0xFFFF),

js 中Unicode是以十六进制代码外加开头 \u 表示的字符串,例如:  爱     //    js中表示为 \u7231     


说一下js中的String对象的两个方法:

//返回字符串某一下标处的Unicode编码;index从0开始
// 如果取负数 或者 >=字符串长度 的值则返回NAN
​stringObject.charCodeAt(index) :  ,如果例如: "爱".charCodeAt(0)  // 输出29233 // numX是unicode编码(十进制类型)
//返回一个或多个Unicode编码对应的汉字
String.fromCharCode(numX,numX,...,numX): 例如:String.fromCharCode(29233)  //输出‘爱’

好了,既然要把汉字转换成Unicode编码,总得知道汉字的Unicode编码范围吧,不然怎么判断呢

简体汉字: \u4e00-\u9fa5  

// 判断字符是否为汉字,
function isChinese(s){return /[\u4e00-\u9fa5]/.test(s);
}

js中汉字转Unicode编码:

// 把字符串中的汉字转换成Unicode
function ch2Unicdoe(str){if(!str){return;}var unicode = '';for (var i = 0; i <  str.length; i++) {var temp = str.charAt(i);if(isChinese(temp)){unicode += '\\u' +  temp.charCodeAt(0).toString(16);}else{unicode += temp;}}return unicode;
}
var str = 'love中国你好';
console.info(ch2Unicdoe(str))    //  love\u4e2d\u56fd\u4f60\u597d

js中Unicode编码 转汉字:

// 方法一
// js中的方法unescape, 对通过escape()方法编码的字符串进行解码,
// 通过找形如: %xx 或者 %xxxx 的字符序列,用Unicode字符\u00xx 和 \uxxxx替换这样的字符序列进行解码
function unescapeF(str){return unescape(str.replace(/\\/g, "%"))
}此方法现在ECMAScript v3之后已不能使用,所以不推荐使用
// 方法2, 遍历字符串
function unicode2Ch(str){if(!str){return;}// 控制循环跃迁var len = 1;var result = '';// 注意,这里循环变量的变化是i=i+len 了for (var i = 0; i < str.length; i=i+len) {len = 1;var temp = str.charAt(i);if(temp == '\\'){// 找到形如 \u 的字符序列if(str.charAt(i+1) == 'u'){// 提取从i+2开始(包括)的 四个字符var unicode = str.substr((i+2),4); // 以16进制为基数解析unicode字符串,得到一个10进制的数字result += String.fromCharCode(parseInt(unicode,16).toString(10));// 提取这个unicode经过了5个字符, 去掉这5次循环len = 6;}else{result += temp;}}else{result += temp;}}return result;
}console.info("unicode2Ch:"+ unicode2Ch("love\u4e2d\u56fd1234\u4f60\u597d")) //love中国1234你好

最后,来看一下js中 URI  加密和解密的方法:

decodeURI(URIstring):  //可对 encodeURI() 函数编码过的 URI 进行解码// 对字符串进行URI 编码,该方法不会对 ASCII 字母和数字进行编码
// 也不会对具有特殊含义的 ASCII 标点符号,如:   :;/?:@&=+$,# 进行编码
// 也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )
encodeURI(URIstring)// 例如
var test1="http://www.w3school.com.cn/My first/?中国"encodeURI(test1)     //http://www.w3school.com.cn/My%20first/?%E4%B8%AD%E5%9B%BD
decodeURI(test1)     //http://www.w3school.com.cn/My first/?中国

 

如果要对比如 ? 和 # 的 字符进行URI 编码,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

decodeURIComponent(URIstring)://对encodeURIComponent() 函数编码的 URI 进行解码//不会对 ASCII 字母和数字进行编码
//也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( )
//但是其他字符,比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都会被由一个或多个十六进制的转义序列替换
encodeURIComponent(URIstring)例如:
var test1="http://www.w3school.com.cn/My first/?中国"encodeURIComponent(test1) //http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F%3F%E4%B8%AD%E5%9B%BD
decodeURIComponent(test1)  //http://www.w3school.com.cn/My first/?中国

 

http://www.lryc.cn/news/2417138.html

相关文章:

  • 智能交通系统:未来城市交通的可视化展示
  • rapidgator.net的下载方法
  • 语音识别系列1:语音识别Speech recognition综述
  • 不知道为什么在公司登陆不了csdn
  • poi-生成excel文档并返还给浏览器
  • python排序算法 ——冒泡排序(附代码)
  • 微机原理小题知识点总结
  • 计算机网络概述(入门篇)
  • Windows API大全
  • printStackTrace()方法在exception中的理解
  • Python:打包生成.pyc、.pyd文件
  • Secure CRT8.1.3 64位安装及注册激活
  • 什么是XHTML,XHTML学习笔记
  • linux基础IO——用户缓冲区——概念深度探索、IO模拟实现
  • kotlin基础 变量,函数 1
  • 虚拟内存、物理内存与OOM Killer
  • SurfaceView和View区别总结
  • html table th分层,html中 table的结构 彻底搞清 caption th thead等
  • tsearch, tfind, tdelete, twalk, tdestr函数—标准树
  • 『TopCoder 组件开发指南』
  • 创建共享网盘、访问共享网盘
  • ubuntu切换软件源为国内源
  • windows 2000 系统安装和配置
  • 修改Win10右键菜单
  • 机器学习——RBF神经网络
  • 信息增益与信息增益率详解
  • 11个超高清图片素材网站,可直接访问
  • oVirt4.4单台主机Allinone部署(非HostedEngine方式)
  • 用户登录模块
  • 为什么要进行透明计算和透明计算是什么