Ⅰ 國際通用的語言編碼是什麼

字元集簡史

雖然不能確定人類開始講話的時間,但書寫已有大約6000年的歷史了。實際上,早期書寫的內容是象形文字。每個字元都對應於發聲的字母表則出現於大約3000年前。雖然人們過去使用的多種書寫語言都用得好好的,但19世紀的幾個發明者還是看到了更多的需求。Samuel F. B. Morse在1838年到1854年間發明了電報,當時他還發明了一種電報上使用的代碼。字母表中的每個字元對應於一系列短的和長的脈沖(點和破折號)。雖然其中大小寫字母之間沒有區別,但數字和標點符號都有了自己的代碼。

Morse代碼並不是以其它圖畫的或印刷的象形文字來代表書寫語言的第一個例子。1821年到1824年之間,年輕的Louis Braille受到在夜間讀寫信息的軍用系統的啟發,發明了一種代碼,它用紙上突起的點作為代碼來幫助盲人閱讀。Braille代碼實際上是一種6位代碼,它把字元、常用字母組合、常用單字和標點進行編碼。一個特殊的escape代碼表示後續的字元代碼應解釋為大寫。一個特殊的shift代碼允許後續代碼被解釋為數字。

Telex代碼,包括Baudot (以一個法國工程師命名,該工程師死於1903年)以及一種被稱為CCITT #2的代碼(1931年被標准化),都是包括字元和數字的5位代碼。

美國標准

早期計算機的字元碼是從Hollerith卡片(號稱不能被折迭、捲曲或毀傷)發展而來的,該卡片由Herman Hollerith發明並首次在1890年的美國人口普查中使用。6位字元碼系統BCDIC(Binary-Coded Decimal Interchange Code:二進制編碼十進制交換編碼)源自Hollerith代碼,在60年代逐步擴展為8位EBCDIC,並一直是IBM大型主機的標准,但沒使用在其它地方。

美國信息交換標准碼(ASCII:American Standard Code for Information Interchange)起始於50年代後期,最後完成於1967年。開發ASCII的過程中,在字元長度是6位、7位還是8位的問題上產生了很大的爭議。從可靠性的觀點來看不應使用替換字元,因此ASCII不能是6位編碼,但由於費用的原因也排除了8位版本的方案(當時每位的儲存空間成本仍很昂貴)。這樣,最終的字元碼就有26個小寫字母、26個大寫字母、10個數字、32個符號、33個句柄和一個空格,總共128個字元碼。ASCII現在記錄在ANSI X3.4-1986字元集-用於信息交換的7位美國國家標准碼(7-Bit ASCII:7-Bit American National Standard Code for Information Interchange),由美國國家標准協會(American National Standards Institute)發布。圖2-1中所示的ASCII字元碼與ANSI文件中的格式相似。

ASCII有許多優點。例如,26個字母代碼是連續的(在EBCDIC代碼中就不是這樣的);大寫字母和小寫字母可通過改變一位數據而相互轉化;10個數字的代碼可從數值本身方便地得到(在BCDIC代碼中,字元「0」的編碼在字元「9」的後面!)

最棒的是,ASCII是一個非常可靠的標准。在鍵盤、視訊顯示卡、系統硬體、列印機、字體文件、操作系統和Internet上,其它標准都不如ASCII碼流行而且根深蒂固。

圖2-1 ASCII字元集

國際方面

ASCII的最大問題就是該縮寫的第一個字母。ASCII是一個真正的美國標准,所以它不能良好滿足其它講英語國家的需要。例如英國的英鎊符號(£)在哪裡?

英語使用拉丁(或羅馬)字母表。在使用拉丁語字母表的書寫語言中,英語中的單詞通常很少需要重音符號(或讀音符號)。即使那些傳統慣例加上讀音符號也無不當的英語單字,例如c鰋perate或者résumé,拼寫中沒有讀音符號也會被完全接受。

但在美國以南、以北,以及大西洋地區的許多國家,在語言中使用讀音符號很普遍。這些重音符號最初是為使拉丁字母表適合這些語言讀音不同的需要。在遠東或西歐的南部旅遊,您會遇到根本不使用拉丁字母的語言,例如希臘語、希伯來語、阿拉伯語和俄語(使用斯拉夫字母表)。如果您向東走得更遠,就會發現中國象形漢字,日本和朝鮮也採用漢字系統。

ASCII的歷史開始於1967年,此後它主要致力於克服其自身限制以更適合於非美國英語的其它語言。例如,1967年,國際標准化組織(ISO:International Standards Organization)推薦一個ASCII的變種,代碼0x40、0x5B、0x5C、0x5D、0x7B、0x7C和0x7D「為國家使用保留」,而代碼0x5E、0x60和0x7E標為「當國內要求的特殊字元需要8、9或10個空間位置時,可用於其它圖形符號」。這顯然不是一個最佳的國際解決方案,因為這並不能保證一致性。但這卻顯示了人們如何想盡辦法為不同的語言來編碼的。

擴展ASCII

在小型計算機開發的初期,就已經嚴格地建立了8位位元組。因此,如果使用一個位元組來保存字元,則需要128個附加的字元來補充ASCII。1981年,當最初的IBM PC推出時,視訊卡的ROM中燒有一個提供256個字元的字元集,這也成為IBM標準的一個重要組成部分。

最初的IBM擴展字元集包括某些帶重音的字元和一個小寫希臘字母表(在數學符號中非常有用),還包括一些塊型和線狀圖形字元。附加的字元也被添加到ASCII控制字元的編碼位置,這是因為大多數控制字元都不是拿來顯示用的。

該IBM擴展字元集被燒進無數顯示卡和列印機的ROM中,並被許多應用程序用於修飾其文字模式的顯示方式。不過,該字元集並沒有為所有使用拉丁字母表的西歐語言提供足夠多的帶重音字元,而且也不適用於Windows。Windows不需要圖形字元,因為它有一個完全圖形化的系統。

在Windows 1.0(1985年11月發行)中,Microsoft沒有完全放棄IBM擴展字元集,但它已退居第二重要位置。因為遵循了ANSI草案和ISO標准,純Windows字元集被稱作「ANSI字元集」。ANSI草案和ISO標准最終成為ANSI/ISO 8859-1-1987,即「American National Standard for Information Processing-8-Bit Single-Byte Coded Graphic Character Sets-Part 1: Latin Alphabet No 1」,通常也簡寫為「Latin 1」。

在Windows 1.0的《Programmer's Reference》中印出了ANSI字元集的最初版本,如圖2-2所示。

圖2-2 Windows ANSI字元集(基於ANSI/ISO 8859-1)

空方框表示該位置未定義字元。這與ANSI/ISO 8859-1的最終定義一致。ANSI/ISO 8859-1僅顯示了圖形字元,而沒有控制字元,因此沒有定義DEL。此外,代碼0xA0定義為一個非斷開的空格(這意味著在編排格式時,該字元不用於斷開一行),代碼0xAD是一個軟連字元(表示除非在行尾斷開單詞時使用,否則不顯示)。此外,ANSI/ISO 8859-1將代碼0xD7定義為乘號(*),0xF7為除號(/)。Windows中的某些字體也定義了從0x80到0x9F的某些字元,但這些不是ANSI/ISO 8859-1標準的一部分。

MS-DOS 3.3(1987年4月發行)向IBM PC用戶引進了代碼頁(code page)的概念,Windows也使用此概念。代碼頁定義了字元的映像代碼。最初的IBM字元集被稱作代碼頁437,或者「MS-DOS Latin US)。代碼頁850就是「MS-DOS Latin 1」,它用附加的帶重音字母(但不是圖2-2所示的Latin 1 ISO/ANSI標准)代替了一些線形字元。其它代碼頁被其它語言定義。最低的128個代碼總是相同的;較高的128個代碼取決於定義代碼頁的語言。

在MS-DOS中,如果用戶為PC的鍵盤、顯示卡和列印機指定了一個代碼頁,然後在PC上創建、編輯和列印文件,一切都很正常,每件事都會保持一致。然而,如果用戶試圖與使用不同代碼頁的用戶交換文件,或者在機器上改變代碼頁,就會產生問題。字元碼與錯誤的字元相關聯。應用程序能夠將代碼頁信息與文件一起保存來試圖減少問題的產生,但該策略包括了某些在代碼頁間轉換的工作。

雖然代碼頁最初僅提供了不包括帶重音符號字母的附加拉丁字元集,但最終代碼頁的較高的128個字元還是包括了完整的非拉丁字母,例如希伯來語、希臘語和斯拉夫語。自然,如此多樣會導致代碼頁變得混亂;如果少數帶重音的字母未正確顯示,那麼整個文字便會混亂不堪而不可閱讀。

代碼頁的擴展正是基於所有這些原因,但是還不夠。斯拉夫語的MS-DOS代碼頁855與斯拉夫語的Windows代碼頁1251以及斯拉夫語的Macintosh代碼頁10007不同。每個環境下的代碼頁都是對該環境所作的標准字元集修正。IBM OS/2也支援多種EBCDIC代碼頁。

但等一下,你會發現事情變得更糟糕。

雙位元組字元集

迄今為止,我們已經看到了256個字元的字元集。但中國、日本和韓國的象形文字元號有大約21,000個。如何容納這些語言而仍保持和ASCII的某種兼容性呢?

解決方案(如果這個說法正確的話)是雙位元組字元集(DBCS:double-byte character set)。DBCS從256代碼開始,就像ASCII一樣。與任何行為良好的代碼頁一樣,最初的128個代碼是ASCII。然而,較高的128個代碼中的某些總是跟隨著第二個位元組。這兩個位元組一起(稱作首位元組和跟隨位元組)定義一個字元,通常是一個復雜的象形文字。

雖然中文、日文和韓文共享一些相同的象形文字,但顯然這三種語言是不同的,而且經常是同一個象形文字在三種不同的語言中代表三件不同的事。Windows支持四個不同的雙位元組字元集:代碼頁932(日文)、936(簡體中文)、949(韓語)和950(繁體漢字)。只有為這些國家(地區)生產的Windows版本才支持DBCS。

雙字元集問題並不是說字元由兩個位元組代表。問題在於一些字元(特別是ASCII字元)由1個位元組表示。這會引起附加的程序設計問題。例如,字元串中的字元數不能由字元串的位元組數決定。必須剖析字元串來決定其長度,而且必須檢查每個位元組以確定它是否為雙位元組字元的首位元組。如果有一個指向DBCS字元串中間的指針,那麼該字元串前一個字元的地址是什麼呢?慣用的解決方案是從開始的指針分析該字元串!

Unicode解決方案

我們面臨的基本問題是世界上的書寫語言不能簡單地用256個8位代碼表示。以前的解決方案包括代碼頁和DBCS已被證明是不能滿足需要的,而且也是笨拙的。那什麼才是真正的解決方案呢?

身為程序寫作者,我們經歷過這類問題。如果事情太多,用8位數值已經不能表示,那麼我們就試更寬的值,例如16位值。而且這很有趣的,正是Unicode被制定的原因。與混亂的256個字元代碼映像,以及含有一些1位元組代碼和一些2位元組代碼的雙位元組字元集不同,Unicode是統一的16位系統,這樣就允許表示65,536個字元。這對表示所有字元及世界上使用象形文字的語言,包括一系列的數學、符號和貨幣單位符號的集合來說是充裕的。

明白Unicode和DBCS之間的區別很重要。Unicode使用(特別在C程序設計語言環境里)「寬字元集」。「Unicode中的每個字元都是16位寬而不是8位寬。」在Unicode中,沒有單單使用8位數值的意義存在。相比之下,在雙位元組字元集中我們仍然處理8位數值。有些位元組自身定義字元,而某些位元組則顯示需要和另一個位元組共同定義一個字元。

處理DBCS字元串非常雜亂,但是處理Unicode文字則像處理有秩序的文字。您也許會高興地知道前128個Unicode字元(16位代碼從0x0000到0x007F)就是ASCII字元,而接下來的128個Unicode字元(代碼從0x0080到0x00FF)是ISO 8859-1對ASCII的擴展。Unicode中不同部分的字元都同樣基於現有的標准。這是為了便於轉換。希臘字母表使用從0x0370到0x03FF的代碼,斯拉夫語使用從0x0400到0x04FF的代碼,美國使用從0x0530到0x058F的代碼,希伯來語使用從0x0590到0x05FF的代碼。中國、日本和韓國的象形文字(總稱為CJK)佔用了從0x3000到0x9FFF的代碼。

Unicode的最大好處是這里只有一個字元集,沒有一點含糊。Unicode實際上是個人計算機行業中幾乎每個重要公司共同合作的結果,並且它與ISO 10646-1標准中的代碼是一一對應的。Unicode的重要參考文獻是《The Unicode Standard,Version 2.0》(Addison-Wesley出版社,1996年)。這是一本特別的書,它以其它文件少有的方式顯示了世界上書寫語言的豐富性和多樣性。此外,該書還提供了開發Unicode的基本原理和細節。

Unicode有缺點嗎?當然有。Unicode字元串佔用的內存是ASCII字元串的兩倍。(然而壓縮文件有助於極大地減少文件所佔的磁碟空間。)但也許最糟的缺點是:人們相對來說還不習慣使用Unicode。身為程序寫作者,這就是我們的工作。

Ⅱ 世界各國和地區英文簡寫

1、法國 FR (France)

2、英國 GB (Great Britain)

3、格瑞那達 GD (Grenada)

4、 迦納 GH (Ghana)

5、甘比亞 GM (Gambia)

6、幾內亞 GN (Guinea-Bissau)

7、赤道幾內亞 GQ (Equatorial Guinea)

8、希臘 GR (Greece)

9、瓜地馬拉 GT (Guatemala)

10、印度IN (India)

11、日本 JP (Japan)

12、澳大利亞 AU (Australia)

13、中國CN (China)

(2)國際語言代碼擴展閱讀

Greece讀法 英[ɡriːs] 美[ɡriːs]

n(名詞).希臘

詞彙搭配

1、Greece-Roman wrestling 古典式摔跤

2、eye of Greece 雅典

3、Roman Greece希臘的羅馬時期

4、Greece Buddhist希臘佛教式

5、Classic Greece古典希臘限量筆

6、Greece Myth希臘神話

例句

1、The ship carried the national flag of Greece.

那條船懸著希臘國旗。

2、Ancient Greece was an advanced civilization.

古希臘是個先進的文明國家。

Ⅲ C語言代碼解釋「Hello,world」

printf("Hello,world ");//printf是系統輸出函數,用於向控制台列印文字。

#include"stdio.h"//標准輸入輸出庫的內頭文件容

#include"conio.h"//控制台輸入輸入庫的頭文件

#include<stdio.h>

intmain()

{

printf("helloworld! ");//輸出helloword!

return1;//返回1

}

(3)國際語言代碼擴展閱讀

「Hello,world」的引用

HelloWorld最初是由BrianKernighan創建的。1978年,BrianKernighan寫了一本名叫《C程序設計》的編程書,在程序員中廣為流傳。他在這本書中第一次引用的HelloWorld,之後「Helloworld」就開始流行起來,並成為了計算機發展歷史上一個具有重要意義的起點。

例:

main(){

分機a,b,c;

putchar(a);putchar(b);putchar(c);putchar('!*n');

}

「地獄」;

b'o,w';

c'orld';

Ⅳ 國際C語言混亂代碼大賽的代碼樣例

第屆國際C語言混亂代碼大賽(IOCCC)正式發布了獲獎源代碼。IOCCC要求參賽者寫出最有創意且最讓人難以理解的C語言代碼,大小限制在4 kb以內,因此每位參賽者的作品都讓人印象深刻。獲勝者包括1名法國人,1名韓國人,5名美國人,1名比利時人,1名以色列人,1名英國人,4名日本人和1名中國人。
選取了幾個代表性作品大家共賞一下更可怕的是,它們都可以編譯通過!!!! #include <stdio.h>
#include <stdlib.h>
#define s(_)sizeof(_)
#define n void*
#define z(_)_,_,_
#define x (s*)__
#define y (s*)_
#define h C(y,y)
#define o &d
#define t() (p)
#define w(_)_,_
typedef n (*(*(*(*p)(n,n))(n,n))(n,n))(n,n);
typedef struct s { struct s* a ; struct s* UNUSED; } s;
typedef struct t { struct s* UNUSED; struct s* a ; } *t;
n __(n _,n __) { return _;}n _(n _,n __){return __; }
typedef unsigned char e;
#define _(_)((*_).a)
s*
w,
a={x ,x},
b={x ,y},
c={y,x},d={y,y};s l[]={&b,&d,w (w(w(w(w(w(&d)))))),w(&d),&c,&d,w(w(w(
&d))),&c,w(&b),&d,&a,z(&d),z(w (w(w(w(w(&d)))))),&b,&b,w(&d),&a,&b,w(&
d), z(w
(w( w(w
(&d))))),w(w(w(&d))), &b,&c,&d, &d,&a,&c ,w(w(&d)), &c,z(&b) ,w(&d),w(&a)
};s* C(s* a, s* b) {s* _=malloc(s(s));_(_)=a;_((t)_)=b;return _;}e k2=s(l
);p f(p
a,p b)
{ e k;s d;p v,r, q,i,C,c,u,g,m=t( )
_ ( _(_(w)));C=t() _(_(&l[fread(&k,s(e )
,s ( e),stdin)]));v =C(_,__);d=l[k=(e )
C ( k2,k)];c=(u=a( b,_),i=(t()_((t )
_ ( _(w))))(_,_(_(o)) ),(a(_(_((t)o)),(t( )
_ ( _((t)o)))(_,__) ))(b(_((t)_((t)o) )
, ( t()_((t)_((t)o))) (_,__)),_));{p a=t( )
_ ( (t)_(o));{p b= C(_,i(u(_,__),_) )
; { p u=C(_,(t()_(_(o) ))(_,__));_(_(_(w)) )
= ( s*)i(__,_(_( _(w))));r=b(m(c,_ )
,C ( m(_,(t()_(( t)_(_(w))))(_,__) )
, ( f)));v=b(_,v);i =b(a(_,__),_);g=(b )
( a(m(c(_,__),__ ),_),_);q=u(_((t )
_ ( o)),_)((t()_( (t)_(_(w))))((t( )
_ ( _((t)o)))(_(_((t )_(w))),(t()_(_((t )
_ ( w))))(_,__))( _,__),_)(_,__),_ )
;_ ( _((t)_(w))) = (s*)u(_((t)_(o)),_ )
( (t()_((t)_(_(w)))) (_,__),_)(_(_((t)o) )
,_ ( _((t)_(w))));} }_((t)_(_(w)))=(s* )
q ( a=(t()_((t)_(_(w))) )(_,__),_((t)_(_(w))) )
; fwrite((k=k,&k2) ,s(e),u(_,g)(s(e )
, ( e)s(s[s(s[s(s[s (s)])])])),stdout )
; fwrite((k2=k,&k) ,s(e),u(__,g)(s(e )
, ( e)s(s[s(s[s(s[s (s)])])])),stdout )
;_ ( _(_((t)w)))=(s*) u((t()_(_(_((t)w))) )
( _,__),_(_(_((t)w ))));_(_((t)_(w)) )
= ( s*)q(a(_(_((t) o)),_(_((t)_(w))) )
,_ ( _((t)_(w))));} _((t)_(_((t)w)))=(s* )
( t()_(_(_((t)w))) )(_((t)_(_((t)w)) )
,u ( (t()_((t)_(_(( t)w))))(_,__),_((t )
_ ( _((t)w)))));g =u((q=u(C(__,(t( )
_ ( _(_((t)w))))(_((t )_(_((t)w))),_)),_) )
( _,__),g);v=g( __,i(u(_,i(f,_) )
( _(_((t)o)),_( (t)_((t)o))),v) )
,r= q(_
,g( f,i
(v(f,(_(_(_(w)))=(s*)m,_)),r)));return q(_,v)(r(g(__,a),g(__,b)),r);}
int main
(){w=C(C(h,h),C(h,h));return printf((e*)f(_,_)(OK , ^ Error
)) (運行生成更小的頭像代碼) /*++++[>i>n[t*/#include<stdio.h>/*2w0,1m2,]_<n+am+o>r>i>=>(['0n1'0)1;*/int/**/main(int/**/n,char**m){FILE*p,*q;intA,k,a,r,i/*#uinndcelfu_dset<rsitcdti_oa.nhs>i/_*/;char*d=P%d %d40%d/**/ %d 0wb+,b[1024],y[]=yuriyurarararayuruyuri*daijiken**akkari~n**/y*u*k/riin<ty(uyr)g,aur,arr[a1r2a82*y2*/u*r{uyu}riOcyurhiyua**rrar+*arayra*=yuruyurwiyuriyurara'rariayuruyuriyuriyu>rarararayuruy9uriyu3riyurar_aBrMaPrOaWy^?*]/f]`;hvroai<dp/f*i*s/<ii(f)a{tpguat<cahfaurh(+uf)a;f}vivn+tf/g*`*w/jmaa+i`ni(/***/i+k[>+b+i>++b++>l[rb;int/**/u;for(i=0;i<101;i++)y[i*2]^=~hktrvg~dmG*eoa+%squ#l2:(wn1l))v?wM353{/Y;lgcGp`vedllwudvOK`cct~[|ju{stkjalor(stwvnegtyogYURUYURI[i]^y[i*2+1]^4;/*!*/p=(n>1&&(m[1][0]-'-'||m[1][1]!=''))?fopen(m[1],y+298):stdin;/*y/riynrt~(^w^)],]c+h+a+r+*+*[n>)+{>f+o<r<(-m]=<2<5<64;}-]-(m+;yry[rm*])/[**/q=(n<3||!(m[2][0]-'-'||m[2][1]))?stdout/*]{}[*/:fopen(m[2],d+14);if(!p||/*]<<*-]>y++>u>>+r>+u+++y>--u---r>++i+++<)<;[>-m-.>a-.-i.++n.>[(w)*/!q/**/)return+printf(Cannot open40%s40for40%sing ,m[!p?1:2],!p?/*o=82]5<<+(+3+1+&.(+m+-+1.)<)<|<|.6>4>-+(>m-&-1.9-2-)-|-|.28>-w-?-m.:>([28+*/read:writ);for(a=k=u=0;y[u];u=2+u){y[k++]=y[u];}if((a=fread(b,1,1024/*,mY/R*YR*/,p/*U*/)/*R*/)>/*U{*/2&&b/*Y*/[0]/*U*/=='P'&&4==/*y*r/y)r}*/sscanf(b,d,&k,&A,&i,&r)&&!(k-6&&k-5)&&r==255){u=A;if(n>3){/*]&<1<6<?<m.-+1>3>+:+.1>3+++.-m-)-;.u+=++.1<0<<;f<o<r<(.;<([m(=)/8*/u++;i++;}fprintf(q,d,k,u>>1,i>>1,r);u=k-5?8:4;k=3;}else/*]>*/{(u)=/*{p>>u>t>-]s>++(.yryr*/+(n+14>17)?8/4:8*5/4;}for(r=i=0;;){u*=6;u+=(n>3?1:0);if(y[u]&01)fputc(/*<g-e<t.c>h.ar-(-).)8+<1.>;+i.(<)<<)+{+i.f>([180*/1*(r),q);if(y[u]&16)k=A;if(y[u]&2)k--;if(i/*(^w^NAMORI;{I*/==a/*)*/){/**/i=a=(u)*11&255;if(1&&0>=(a=fread(b,1,1024,p))&&)]i>(w)-;}{/i-f-(-m--M1-0.)<{[8]==59/**/)break;i=0;}r=b[i++];u+=(/**>>*..</<<<)<[[;]**/+8&*(y+u))?(10-r?4:2):(y[u]&4)?(k?2:4):2;u=y[u/*49;7i(w)/;}y}ru=*ri[,mc]o;n}trientuuren(*/]-(int)'`';}fclose(p);k=+fclose(q);/*]<*.na/m*o{ri{d;^w^;}}^_^}}*/returnk--1+/*''-`*/(-/*}/*/0x01);{;{}};/*^w^*/;}

Ⅳ 為何軟體(裡面的代碼)都是英文的呢,怎麼都沒有中文的呢

當然了,代碼代碼你有聽過中文代碼嗎,就像你電腦系統很多都是英文,道理是一樣的,因為很多都是借外國編輯軟體編輯的,所以就這樣,

Ⅵ 各國的文字編碼都是什麼呢,為什麼在網路上我們能顯示各種不同的語言文字呢,

UNICODE使任何語言的字元都可以為機器更容易的接受,UNICODE由UC(UNICODE協會)管理並接受其技術上的修改。包括JAVA、LDAP、XML這樣的技術標准中均要求得到UNICODE的支持。UNICODE的字元被成為代碼點(CODE POINTS),用U後面加上XXXX來表示,其中,X為16進制的字元。

對於英文來說,ascii碼 0-127就足以代碼所有字元,對於中文而言,則必須使用兩個位元組(byte)來代表一個字元,具第一個位元組必須大於127(所以我們有許程序判斷中文都是以ascii碼大於127作為條件)。以上用兩個位元組來表示一個中文的方式,在習慣上稱為雙位元組(即DBCS: Double-Byte Character Set),而相對之下,英文的字元碼就稱為單位元組SBCS(Single-Byte Character Set)。

雖然雙位元組(DBCS)足以解決中英文字元混合使用情況,但對於不同字元系統而言,必須經過字元碼轉換,非常麻煩。例如:中英文混合情況,日文,韓文等等。為解決這個問題,國際標准組織於1984年4月成立ISO/IEC JTC1/SC2/WG2工作組。針對各國文字、符號進行統一性編碼。1991年美國跨國公司成立Unicode Consortium。並於1991年10月與WG2達成協議。採用同一編碼字集。目前Unicode是採用16位編碼體系。其字元集內容與ISO10646的BMP(Basic Multilingual Plane)相同。Unicode於1992年6月通過DIS(Draf International Standard)。目前版本V2.0於1996公布。內容包含符號6811個。漢字20902個。韓文拼音11172個。造字區6400個。保留20249個。共計65534個。

隨著國際互聯網的迅速發展。要求進行數據交換的需求越來越大。不同的編碼體系越來越成為信息交換的障礙。而且多種語言共存的文檔不斷增多。單靠代碼頁已很難解決這些問題。於是UNICODE應運而生。

UNICODE有雙重含義。首先UNICODE是對國際標准ISO/IEC10646編碼的一種稱謂(ISO/IEC10646是一個國際標准。亦稱大字元集。它是ISO於1993年頒布的一項重要國際標准。其宗旨是全球所有文種統一編碼)。另外它又是由美國的HP、Microsoft、IBM、Apple等大企業組成的聯盟集團的名稱。成立該集團的宗旨就是要推進多文種的統一編碼。

UNICODE同現在流行的代碼頁最顯著不同點在於:UNICODE是兩位元組的全編碼。對於ASCII字元它也使用兩位元組表示。代碼頁是通過高位元組的取值范圍來確定是ASCII字元。還是漢字的高位元組。如果發生數據損壞。某處內容破壞。則會引起其後漢字的混亂。UNICODE則一律使用兩個位元組表示一個字元。最明顯的好處是它簡化了漢字的處理過程。

UNICODE使用平面來描述編碼空間。每個平面分為256行。256列。相對於兩位元組編碼的高低兩個位元組。

UNICODE的第一個平面。稱為Basic Multilingual Plane(基本多文種平面)。簡稱BMP。由於BMP僅用兩個位元組表示。所以倍受青睞。

Unicode的最初目標。是用1個16位的編碼來為超過65000字元提供映射。但這還不夠。它不能覆蓋全部歷史上的文字。也不能解決傳輸的問題(implantation head-ache's)。尤其在那些基於網路的應用中。因此。Unicode用一些基本的保留字元制定了三套編碼方式。它們分別是UTF-8,UTF-16和UTF-32。正如名字所示。在UTF-8中。字元是以8位序列來編碼的。用一個或幾個位元組來表示一個字元。這種方式的最大好處。是UTF-8保留了ASCII字元的編碼做為它的一部分。例如。在UTF-8和ASCII中。「A」的編碼都是0x41.UTF-16和UTF-32分別是Unicode的16位和32位編碼方式。考慮到最初的目的。通常說的Unicode就是指UTF-16。

多年來。計算機普遍採用美國信息交換標准代碼(American Standard Code for Information Interchange,簡稱ASCII碼)來表示字元。這些字元可以是字母。數字。標點符號和控制符。用這種編碼來表示英文在內的字元不成問題的。但要表示其它語言文字如。阿拉伯文。中文。日文。維文。哈文…必須進行擴充。在1987年。Xerox Palo Alto研究中心的Joe Becker和Lee Collins。以及Apple公司的Mark Davis試圖研究一種適用於多文種處理的字元編碼。這種編碼很快就得到了許多大公司的支持。這些公司都派代表參加Unicode研究組。Unicode的研究得到了較快的進展。由於Unicode集團的成員都是世界上的主要系統及軟體製造商。所以Unicode很快就成為事實上的工業標准。

基於Unicode的系統允許使用65000個不同的字元。足以善蓋世界所有語言的所有字母。外加數千種符號。

其中。General Scripts區單獨收錄了19種語言文字。包括ASCII,Latin1,Greek,Cyrillic,Armenian,Hedrew,Arabic,Devanagari,Bengali ,Gurmukhi,Gujarati,Oriya,Tamil,Telugu,Kannada,Malayalam,Thai,Lao,Tibetan,Georgian等語言文字之外。還包括漢語。日語和朝鮮語中的所有大量字元。

Unicode是一種定長的2B多文種字元集編碼。它試圖善蓋現有的有關國家和地區的標准。包括GB2312,CNS11643,JIS 0208和KSC 5601等。Unicode可以表示混合文字資料。也可以保證以前的ISO 10646。

Unicode的特點是:

不管哪一國的字元碼均以兩個Byte表示,例如"A"在Unicode則是16進制 41和00的組合,即4100,高位41(轉換為Ascii碼即是65=A),Windows NT/2000以Unicode來表示字元集,例如你可以看到MS SQL Server中產生的SQL文件可以選擇是以Unicode來保存還是以普通格式來保存,如果你以Unicode保存,則在95/98平台許多軟體均無法正確讀出其格式。

同時你還可以注意到95/98中API定義,許多名稱結尾是有一個A的,例如

WriteProfileStringA

而在NT/2000操作系統中,提供了兩套API,另外一個命令是WriteProfileStringW,以W 結尾的API只適用於NT / 2000。(在NT中使用以W結尾的API函數效率比A結尾的要快,因為省去了Unicode和DBCS/SBCS的轉換過程)

這樣我們經常要用到的判斷字元串長度的函數,在NT和95/98下執行結果不同,如下:(下面代碼適合於VB, ASP)

95/98中:

len("abc中國") 返回 7 (因為每個中文作為兩個Ascii碼來看)

NT/2000中:

len("abc中國") 返回 5 (因為每個字元都作為一個Unicode來看)

Ⅶ 名族語言國際編碼

國家編碼是指哪個國際編碼?英文用的是ASCII,中文用的是兩個位元組的ASCII,按理說不同語言的編碼是唯一的,不可能被重用吧。你詳細說下的你的問題?