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/?中国

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值