1. 程式人生 > >js 中漢字和Unicode 互轉

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

相關推薦

js 漢字Unicode

    首先,什麼是Unicode,百科知識:Unicode(統一碼、萬國碼、單一碼)是電腦科學領域裡的一項業界標準,包括字符集、編碼方案等;Unicode 是為了解決傳統的字元編碼方案的侷限而產生的,它為每種語言中的每個字元設定了統一併且唯一的二進位制編碼,以滿足跨語言、跨

C#與unitybase64string圖片

C#: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Drawing; using

一個簡單方便的ANSIUNICODE方法

最近多次使用_bstr_t這個封裝BSTR類,發現微軟封裝得還挺不錯的,能很簡單方便的ANSI和UNICODE互轉。 VC6.0預設是沒新增_bstr_t 類的支援標頭檔案comdef.h,還需要用#include <comdef.h>新增標頭檔案。 _bstr_

androidhtmltext

html轉text mEditText = (EditText) findViewById(R.id.et); mEditText.setText(Html.fromHtm

Java開發POJOJSON時如何忽略隱藏欄位

![](https://img2020.cnblogs.com/other/1739473/202102/1739473-20210203103534561-1966374104.png) ## 1. 前言 在**Java**開發中有時候某些敏感資訊我們需要遮蔽掉,不能被消費這些資料的客戶端知道。通常情況

jsjson物件string

json轉string的方法 /** * json物件轉字串形式 */ function json2str(o) { var arr = []; var fmt = function(s) { if (typeof s ==

【2017-05-21】WebForm跨頁面傳值取值、C#服務端跳頁面、 Button的OnClientClick屬性、JsgetAttribute超鏈接點擊彈出警示框。

代碼 height delet update size 內存 客戶 bar win 一、跨頁面傳值和取值: 1、QueryString - url傳值,地址傳值 優缺點:不占用服務器內存;保密性差,傳遞長度有限。 通過跳轉頁面路徑進行傳值,方式: href="地址?ke

jspost中文參數解碼

OS AR 轉碼 encode encodeuri 前端 部分 進行 code 作為基礎知識和血淋林的教訓,前端一定要記得post請求時將參數中帶有中文的部分進行轉碼!! var str=‘宋宇·特弱夫斯基‘; //轉碼: encodeURI(encodeURI(str))

dlib的imageopencv的image格式

//dlib::array2d is an image already, you can use it for any dlib's image functions //load image: dlib::array2d<dlib::rgb_pixe

Unicode編碼中文(JAVA實現)

//中文轉Unicode public static String gbEncoding(final String gbString) { //gbString = "測試" char[] utfBytes = gbString.toCharArray();

jsjava字元unicode編碼的轉化

一般來說,良好的程式設計習慣要求在程式碼裡儘量不出現中文,一個是國際化問題,即同一份程式碼可能要滿足不同語言的顯示,還一個就是可能產生亂碼問題,不同的程式設計師用不同的IDE匯入這份程式碼可能使用了不同的預設編碼。 然而有些場景是必須保持中文的,比如讀取某個帶樣式文字的字型

C char/wchar_t之間的 多位元組(MultiByte)寬字元(Unicode)

wchar_t wstr[100]=L"wstr"; char str[100]; wcstombs(str,wstr,100);//寬字元轉多位元組 mbstowcs(wstr,str,100);//多位元組轉寬字元 也可以使用:MultiByteToWide

C字串UTF-8GB2312

在程式設計過程中需要對字串進行不同的轉換,特別是Gb2312和Utf-8直接的轉換。在幾個開源的魔獸私服中,很多都是老外開發的,而暴雪為了能 夠相容世界上的各個字符集也使用了UTF-8。在中國使用VS(VS2005以上版本)開發基本都是使用Gb2312的Unicode字符

js 物件型陣列字串

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head&

char * string,陷阱:char*包含較多的'\0'

一般來說,char *和string能夠比較容易的進行相互轉換,比如char *轉換成string,可以直接轉,如下:-Cpp 程式碼1char *a = "abcdefg";2std::string

【程式設計筆記】UNICODEUTF-8ASCII

最近維護一個專案時發現,MFC的Cstring型別寫到ini文字時,出現了亂碼。因為寫入的資料帶有類似的特殊字元❀,由於ini預設建立的編碼格式為GBK編碼格式,但是這個特殊字元在預設的GBK編碼下是不能識別的,會以?的形式存在。那這個特殊字元的編碼是什麼,暫時還沒搞清楚。但

JSisPrototypeOf hasOwnProperty 的區別

另一個 strong 是否 指定 不同 名稱 功能 成員 eof 1、isPrototypeOf isPrototypeOf是用來判斷指定對象object1是否存在於另一個對象object2的原型鏈中,是則返回true,否則返回false。 格式如下: object1.is

jsundefinednull的區別

常常 html exist tex 輸出 output 為什麽 hive 存在 轉自:http://www.cnblogs.com/eastday/archive/2010/03/03/1677324.html 在JavaScript中存在這樣兩種原始類型:Null與Und

jseval()$.parseJSON()的區別

16px 異常 comment 而不是 str on() ajax 鏈接 強制 之前自己一直對ajax不是特別的熟悉,所以一般都很少用這個去寫功能,但是最近這個項目中用到了,用ajax異步傳數據,json傳數據這個時候就需要去解析傳過來的數據了,eval()和$.parse

wchar_t* char*

multi pan com nic return compose ide acp 轉化 //將單字節char*轉化為寬字節wchar_t* wchar_t* AnsiToUnicode(const char* szStr){ int nLen = MultiByte