Unicode 編碼轉換器怎么使用
Unicode編碼,是一種文件儲存時使用的儲存編碼,由0x000000至0xFFFFFFF的十六進制數字序列組成,能夠表示世界上大多數的語言文字 。
Unicode轉換器,是用于將文字和Unicode代碼互相轉換的工具,能夠很快地將兩者相互轉換,便于研究文件編碼方式 。
一般的用戶可能不需要此類工具,但是在訪問某些Unicode網站時可能需要進行代碼轉換,此時可以進行設置 。在瀏覽器的菜單中點擊“查看”-“編碼設置”,選中“UTF-8(Unicode)”項目即可將當前網頁以Unicode編碼方式呈現 。
請問如何用C語言實現漢字,和Unicode編碼的轉換?
字轉換:wctomb、mbtowc,wc 指 Wide charactor,mb 指 Multi-byte 。\r
字符串轉換:wcstombs、mbstowcs,wcs 和 mbs 的 s 指 string 。\r
\r
這 4 個函數是 C 標準函數庫函數中的 。如果只是在 Windows 平臺下編程,可直接調用 Windows API 函數 WideCharToMultiByte 和 MultiByteToWideChar 實現 。但是如果調用標準庫函數的話,在 Linux下也是有效的 。調用標準庫函數,首先必須包含 locale.h 并調用 setlocale(LC_ALL, "") 后才能正確轉換 。Windows 下的 Multi-byte 是 ANSI 編碼的,Wide charactor 是 Unicode (UTF-16) 編碼,而 Linux 下的 Multi-byte 是 UTF-8 編碼的,Wide charactor 是 Unicode (UTF-32) 編碼 。\r
\r
#include \r
#include \r
#include
\r
int main(void)\r
{\r
char str[12];\r
wchar_t wstr[] = { 0x52B3, 0x788C, 0 };\r
setlocale(LC_ALL, "");\r
wcstombs(str, wstr, sizeof(str)/sizeof(char));\r
printf("%s", str);\r
return 0;\r
}
Unicode詳解
字符編碼的問題,每個程序員都會遇到,深入探索其背后的原理和機制,能讓我們少走很多彎路 。
Unicode ( 萬國碼 、 國際碼 、 統一碼 、 單一碼 )是計算機科學領域里的一項業界標準 。它對世界上大部分的文字系統進行了整理、編碼,使得電腦可以用更為簡單的方式來呈現和處理文字 。
Unicode發展由非營利機構統一碼聯盟負責,該機構致力于讓Unicode方案替換既有的字符編碼方案 。因為既有的方案往往空間非常有限,亦不適用于多語環境 。
統一碼聯盟在1991年首次發布了 The Unicode Standard。
在2005年,Unicode的第十萬個字元被引入成為標準之一,該字元被用于馬拉雅拉姆語 。
目前實際應用的統一碼版本對應于UCS-2,使用16位的編碼空間 。也就是每個字符占用2個字節 。這樣理論上一共最多可以表示2的16次(即65536)個字符 。基本滿足各種語言的使用 。實際上當前版本的統一碼并未完全使用這16位編碼,而是保留了大量空間以作為特殊使用或將來擴展 。
最新(但未實際廣泛使用)的統一碼版本定義了16個輔助平面,兩者合起來至少需要占據21位的編碼空間,比3字節略少 。但事實上輔助平面字符仍然占用4字節編碼空間,與UCS-4保持一致 。未來版本會涵蓋UCS-4的所有字符 。UCS-4是一個更大的尚未填充完全的31位字符集,加上恒為0的首位,共需占據32位,即4字節 。理論上最多能表示2的31次方個字符,完全可以涵蓋一切語言所用的符號 。
通用字符集 (Universal Character Set)是由ISO制定的 ISO 10646 (或稱 ISO/IEC 10646 )標準所定義的標準字符集 。
通用字符集包括了其他所有字符集 。它保證了與其他字符集的雙向兼容,即,如果你將任何文本字符串翻譯到UCS格式,然后再翻譯回原編碼,你不會丟失任何信息 。
UCS包含了已知語言的所有字符 。除了拉丁語、希臘語、斯拉夫語、希伯來語、阿拉伯語、亞美尼亞語、格魯吉亞語,還包括中文、日文、韓文這樣的方塊文字,UCS還包括大量的圖形、印刷、數學、科學符號 。
ISO/IEC 10646定義了一個31位的字符集 。
并不是所有的系統都需要支持像組合字符這樣的的先進機制 。因此ISO 10646指定了如下三種實現級別:
歷史上存在兩個獨立的嘗試創立單一字符集的組織,即:
1、國際標準化組織(ISO)于1984年創建的ISO/IEC
2、統一碼聯盟
統一碼聯盟和ISO/IEC都同意保持兩者標準的碼表兼容,并緊密地共同調整任何未來的擴展 。
Unicode的實現方式不同于編碼方式 。一個字符的Unicode編碼是確定的 。但是在實際傳輸過程中,由于不同系統平臺的設計不一定一致,以及出于節省空間的目的,對Unicode編碼的實現方式有所不同 。
Unicode的實現方式稱為 Unicode轉換格式 (Unicode Transformation Format,簡稱為 UTF ) 。
前面說到,Unicode采用2個字節來編碼文件,但是如果一個僅包含7位ASCII字符的Unicode文件,每個字符使用2字節就浪費了一般的存儲空間,其第一字節的8位始終為0,這是難以忍受 。對于這種情況,可以使用UTF-8編碼,這是一種變長編碼,它將基本7位ASCII字符仍用7位編碼表示,占用一個字節(首位補0) 。而遇到與其他Unicode字符混合的情況,將按一定算法轉換,每個字符使用1-3個字節編碼,并利用首位為0或1進行識別 。
【Unicode 編碼轉換器怎么使用 unicode編碼轉換工具下載】 問題來了,UTF-8變長編碼格式的出現是為了節省存儲空間,變長導致了UTF-8的兼容性相應降低 。
類似的,對未來會出現的需要4個字節的輔助平面字符和其他UCS-4擴充字符,2字節編碼的UTF-16也需要通過一定的算法進行轉換 。
也就是說,UTF-16是為未來準備的變長編碼格式 。
還有就是,在Mac和普通PC上,對于字節順序的理解是不一致的 。這時同一字節流可能會被解釋為不同內容,如某字符為十六進制編碼4E59,按兩個字節拆分為4E和59,在Mac上讀取時是從低字節開始,那么在Mac OS會認為此4E59編碼為594E,找到的字符為“奎”,而在Windows上從高字節開始讀取,則編碼為U+4E59的字符為“乙” 。就是說在Windows下以UTF-16編碼保存一個字符“乙”,在Mac OS環境下打開會顯示成“奎” 。此類情況說明UTF-16的編碼順序若不加以人為定義就可能發生混淆 。
于是在UTF-16編碼實現方式中使用了 大端序 (Big-Endian,簡寫為UTF-16 BE)、 小端序 (Little-Endian,簡寫為UTF-16 LE)的概念,以及可附加的字節順序記號解決方案,目前在PC機上的Windows系統和Linux系統對于UTF-16編碼默認使用UTF-16 LE 。目前在PC機上的Windows系統和Linux系統對于UTF-16編碼默認使用UTF-16 LE 。
在Windows XP附帶的記事本,“另存為”對話框可以選擇的四種編碼方式除去非Unicode編碼的ANSI(對于英文系統即ASCII編碼),中文系統則為GB2312或Big5外,其余三種為“Unicode”(對應UTF-16 LE)、“Unicode big endian”(對應UTF-16 BE)和“UTF-8” 。
UTF-8,是我們最經常看到的編碼格式之一 。前面已經簡單介紹過,這是一種變長編碼格式,變長的目的是節省存儲空間 。
UTF-8使用一至六個字節為每個字符編碼(2003年11月UTF-8被RFC 3629重新規范,只能使用原來Unicode定義的區域,U+0000到U+10FFFF,也就是說最多四個字節) 。
下面介紹其編碼規則:
1、128個US-ASCII字符只需一個字節編碼(Unicode范圍由U+0000至U+007F) 。
2、帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文等則需要兩個字節編碼(Unicode范圍由U+0080至U+07FF) 。
3、其他基本多文種平面(BMP)中的字元(這包含了大部分常用字,如大部分的漢字)使用三個字節編碼(Unicode范圍由U+0800至U+FFFF) 。
4、其他極少使用的Unicode 輔助平面的字元使用四至六字節編碼 。(Unicode范圍由U+10000至U+1FFFFF使用四字節,Unicode范圍由U+200000至U+3FFFFFF使用五字節,Unicode范圍由U+4000000至U+7FFFFFFF使用六字節) 。
對上述提及的第四種字元而言,UTF-8使用四至六個字節來編碼似乎太耗費資源了 。但UTF-8對所有常用的字元都可以用三個字節表示,而且它的另一種選擇,UTF-16編碼,對前述的第四種字符同樣需要四個字節來編碼,所以要決定UTF-8或UTF-16哪種編碼比較有效率,還要視所使用的字元的分布范圍而定 。
下面來看看UTF-8具體怎么編碼各種類型的字符:
1、單字節編碼,字節由零開始:0zzzzzzz 。(z取值0或1,下同)
2、兩字節編碼:(110yyyyy 10zzzzzz)第一個字節由110開始,接著的字節由10開始
3、三字節編碼:(01110xxxx10yyyyyy 10zzzzzz)第一個字節由1110開始,接著的字節由10開始 。
4、四字節編碼:(11110www 10xxxxxx 10yyyyyy 10zzzzzz)將由11110開始,接著的字節由10開始
UTF-16 是Unicode字符編碼五層次模型的第三層:字符編碼表 。即把Unicode字符集的抽象碼位映射為16位長的整數,用于數據存儲或傳遞 。Unicode字符的碼位,需要1個或者2個16位長的碼元來表示,因此這是一個變長表示 。
Unicode的編碼空間從U+0000到+10FFFF,共有1,112,064個碼位(code point)可用來映射字符. Unicode的編碼空間可以劃分為17個平面(plane),每個平面包含216(65,536)個碼位 。17個平面的碼位可表示為從U+xx0000到U+xxFFFF,其中xx表示十六進制值從0016到1016,共計17個平面 。第一個平面稱為 基本多語言平面 (Basic Multilingual Plane,BMP ),或稱第零平面(Plane 0) 。其他平面稱為 輔助平面 (Supplementary Planes) 。基本多語言平面內,從U+D800到U+DFFF之間的碼位區段是永久保留不映射到Unicode字符 。UTF-16就利用保留下來的0xD800-0xDFFF區段的碼位來對輔助平面的字符的碼位進行編碼 。
分平面來介紹UTF-16的實現方式:
1、第一個Unicode平面(碼位從U+0000至U+FFFF)包含了最常用的字符 。該平面被稱為基本多語言平面,縮寫為 BMP (Basic Multilingual Plane, BMP) 。UTF-16與 UCS-2 編碼這個范圍內的碼位為16比特長的單個碼元,數值等價于對應的碼位. BMP中的這些碼位是僅有的可以在UCS-2中表示的碼位.
2、輔助平面(Supplementary Planes)中的碼位,在UTF-16中被編碼為 一對 16比特長的碼元(即32bit,4Bytes),稱作 代理對 (surrogate pair),具體方法是:
算法可理解為:輔助平面中的碼位從U+10000到U+10FFFF,共計FFFFF個,即220
=1,048,576個,需要20位來表示 。如果用兩個16位長的整數組成的序列來表示,第一個整數(稱為前導代理)要容納上述20位的前10位,第二個整數(稱為后尾代理)容納上述20位的后10位 。還要能根據16位整數的值直接判明屬于前導整數代理的值的范圍(210=1024),還是后尾整數代理的值的范圍(也是210
=1024) 。因此,需要在基本多語言平面中保留不對應于Unicode字符的2048個碼位,就足以容納前導代理與后尾代理所需要的編碼空間 。這對于基本多語言平面總計65536個碼位來說,僅占3.125%.
3、Unicode標準規定U+D800..U+DFFF的值不對應于任何字符.
參考資料:
https://zh.wikipedia.org/wiki/Unicode
https://zh.wikipedia.org/wiki/UTF-8
https://zh.wikipedia.org/wiki/UTF-16
PHPUNICODE 編碼轉換
Unicode是一個字符集,Unicode是定長的都為雙字節.
這里我們常用的是utf8字符集編碼,樓主是說的Unicode轉換為UTF-8吧 。
/**
* Unicode字符轉換成utf8字符
* @param[type] $unicode_str Unicode字符
* @return [type]Utf-8字符
*/
function unicode_to_utf8($unicode_str) {
$utf8_str = '';
$code = intval(hexdec($unicode_str));
//這里注意轉換出來的code一定得是整形,這樣才會正確的按位操作
$ord_1 = decbin(0xe0 | ($code >> 12));
$ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
$ord_3 = decbin(0x80 | ($code & 0x3f));
$utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
return $utf8_str;
}
MFC中如何將一個字符串中的UNICODE編碼轉換
1.在Project->C/C++->Preprocessor definitions 中去除_MBCS, 增加_UNICODE
2.在Project->Link->Category->Output->Entry-point symbol處增加wWinMainCRTStartup
3.拷貝3個文件到工程所在目錄:mfc42u.lib, mfcs42u.lib, atlthunk.lib (WINDDK中就有,或者直接指定這三個文件的路徑,否則會link失敗)
4.數據類型 說明
a)WCHAR Unicode字符
b)PWSTR 指向Unicode字符串的指針
c)PCWSTR 指向一個恒定的Unicode字符串的指針
d)對應的ANSI數據類型為CHAR,LPSTR和LPCSTR
e)ANSI/Unicode通用數據類型為TCHAR,PTSTR,LPCTSTR
5.操作說明
a)ANSI 操作函數以str開頭 strcpy
b)Unicode 操作函數以wcs開頭 wcscpy
c)MBCS 操作函數以_mbs開頭 _mbscpy
d)ANSI/Unicode 操作函數以_tcs開頭 _tcscpy(C運行期庫),如_tcscpy,_tcscat, _tcscmp, _tcschr (查找字串),
e)ANSI/Unicode 操作函數以lstr開頭 lstrcpy(Windows函數)
6.字符集說明
a)Unicode L“string”
b)ANSI “string”
c)ANSI/Unicode T(“string”)
或_TEXT(“string”)if(szError[0]==_TEXT(‘J’) ){ }
7.UNICODE 轉換成ANSI
unsigned short * unicode;
int size= WideCharToMultiByte(CP_ACP,0,unicode,-1, NULL, 0, NULL,0);
char * ansi=new char[size];
WideCharToMultiByte(CP_ACP,0,unicode,-1, ansi, NULL, 0);
8.ANSI 轉換成UNICODE
CString ansi;
DWORD dwNum;
dwNum = MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, NULL, 0);
wchar_t *pwText = new wchar_t[dwNum];;
MultiByteToWideChar(CP_ACP, 0, m_ANSI, -1, pwText, dwNum);
9.判斷如果文本文件的開頭兩個字節是0xFF和0xFE,那幺就是Unicode,否則是ANSI
js 將 unicode編碼轉換中文2種方式
1、網上有工具
2、帶/u 或者%u的是unicode編碼結果
3、轉中文方式
詳細:
unescape() 函數可對通過 escape() 編碼的字符串進行解碼,已廢棄 。
編碼和解碼一一對應關系
escape() 編碼,unescape() 解碼 廢棄
encodeURI 編碼,decodeURI 解碼
encodeURIComponent 編碼,decodeURIComponent 解碼
用什么解碼對應的文件內容
關于unicode編碼轉換和unicode編碼轉換工具下載的內容就分享到這兒!更多實用知識經驗,盡在 m.apearl.cn
- 俄克拉何馬州郵政編碼,俄克拉何馬州立大學世界排名
- 在線編碼轉換,urlencode在線編碼
- 城步苗族自治縣郵政編碼,城步苗族自治縣楊輝剛
- 重慶郵政大學是幾本,重慶郵政招聘
- 圖片轉換器 圖片像素轉換器免費版
- 簡體繁體字轉換器,簡繁體轉換器
- 南江市商業學校現有學生4000人,隨著招生規模的擴大,湛江市赤坎區郵政編碼
- 貴州裝備制造職業學院有哪些專業,貴州裝備制造職業學院郵政編碼
- 基因的非編碼區,指不能夠轉錄為相應信使RNA 基因的非編碼區是什么
- 中文韓語轉換器,翻譯韓文轉換器
