國際語言代碼
Ⅰ 國際通用的語言編碼是什麼
字元集簡史
雖然不能確定人類開始講話的時間,但書寫已有大約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]!='