原創質感面料選邦巨
咨詢即獲免費設計開發方案
18927502276
18927502276
ben.xiong@youranfp.cn

- 聯系邦巨 -
廣州邦巨紡織科技有限公司
咨詢熱線:020-84295856
咨詢郵箱:ben.xiong@youranfp.cn
公司地址:廣州市番禺區南村鎮捷順路9號1棟1411號
編碼-內衣T恤衛衣服裝梭織針織面料知識大全-邦巨紡織
coding編碼定義在計算機硬件中,編碼(coding)是在一個主題或單元上為數據存儲,管理和分析的目的而轉換信息為編碼值(典型地如數字)的過程。在軟件中,編碼意味著邏輯地使用一個特定的語言如C或C++來執行一個程序。在密碼學中,編碼是指在編碼或密碼中寫的行為。
將數據轉換為代碼或編碼字符,并能譯為原數據形式。是計算機書寫指令的過程,程序設計中的一部分。在地圖自動制圖中,按一定規則用數字與字母表示地圖內容的過程,通過編碼,使計算機能識別地圖的各地理要素。
n位二進制數可以組合成2的n次方個不同的信息,給每個信息規定一個具體碼組,這種過程也叫編碼。
數字系統中常用的編碼有兩類,一類是二進制編碼,另一類是二—十進制編碼。漢字的編碼體系1.ASCII與Binary
我們日常接觸到的文件分ASCII和Binary兩種。ASCII是“美國信息交換標準編碼”的英文字頭縮寫,可稱之為“美標”。美標規定了用從0到127的128個數字來代表信息的規范編碼,其中包括33個控制碼,一個空格碼,和94個形象碼。形象碼中包括了英文大小寫字母,阿拉伯數字,標點符號等。我們平時閱讀的英文電腦文本,就是以形象碼的方式傳遞和存儲的。美標是國際上大部分大小電腦的通用編碼。
然而電腦中的一個字符大都是用一個八位數的二進制數字表示。這樣每一字符便可能有256個不同的數值。由于美標只規定了128個編碼,剩下的另外128個數碼沒有規范,各家用法不一。另外美標中的33個控制碼,各廠家用法也不盡一致。這樣我們在不同電腦間交換文件的時候,就有必要區分兩類不同的文件。第一類文件中每一個字都是美標形象碼或空格碼。這類文件稱為“美標文本文件”(ASCIITextFiles),或略為“文本文件”,通常可在不同電腦系統間直接交換。第二類文件,也就是含有控制碼或非美標碼的文件,通常不能在不同電腦系統間直接交換。這類文件有一個通稱,叫“二進制文件”(BinaryFiles)。
2.國標、區位、“準國標”
“國標”是“中華人民共和國國家標準信息交換用漢字編碼”的簡稱。國標表(基本表)把七千余漢字、以及標點符號、外文字母等,排成一個94行、94列的方陣。方陣中每一橫行叫一個“區”,每個區有九十四個“位”。一個漢字在方陣中的坐標,稱為該字的“區位碼”。例如“中”字在方陣中處于第54區第48位,它的區位碼就是5448。
其實94這個數字。它是美標中形象碼的總數。國標表沿用這個數字,本意大概是要用兩個美標形象符代表一個漢字。由于美標形象符的編碼是從33到126,漢字區、位碼如果各加上32,就會與美標形象碼的范圍重合。如上例“中”字區、位碼加上32后,得86,80。這兩個數字的十六進制放在一起得5650,稱為該字的“國標碼”,而與其相對應的兩個美標符號,VP,也就是“中”字的“國標符”了。
這樣就產生了一個如何區分國標符與美標符的問題。在一個中英文混用的文件里,“VP”到底代表“中”字呢,還是代表某個英文字頭縮寫?電子工業部第六研究所開發CCDOS的時候,使用了一個簡便的解決方案:把國標碼的兩個數字各加上128,上升到非美標碼的位置。(改變后的國標碼,習慣上仍叫“國標”。)
這個方案固然解決了原來的問題,可是新的問題隨之產生。中文文件成了“二進制文件”,既不能可靠地在不同電腦系統間交換,也不與市場上大部分以美標符號為設計對象的軟件兼容。
為了區分以上兩種“國標”,我們把原與美標形象碼重合的國標碼稱為“純國標”,而把CCDOS加上128的國標碼稱為“準國標”。
3.GBK碼:
GBK碼是GB碼的擴展字符編碼,對多達2萬多的簡繁漢字進行了編碼,簡體版的Win95和Win98都是使用GBK作系統內碼。
從實際運用來看,微軟自win95簡體中文版開始,系統就采用GBK代碼,它包括了TrueType宋體、黑體兩種GBK字庫(北京中易電子公司提供),可以用于顯示和打印,并提供了四種GBK漢字的輸入法。此外,瀏覽器IE4.0簡體、繁體中文版內部提供了一個GBK-BIG5代碼雙向轉換功能。此外,微軟公司為IE提供的語言包中,簡體中文支持(SimplifiedChineseLanguageSupportKit)的兩種字庫宋體、黑體,也是GBK漢字(珠海四通電腦排版系統開發公司提供)。其他一些中文字庫生產廠商,也開始提供TrueType或PostScriptGBK字庫。
許多外掛式的中文平臺,如南極星、四通利方(Richwin)等,提供GBK碼的支持,包括字庫、輸入法和GBK與其他中文代碼的轉化器。
互聯網方面,許多網站網頁使用GBK代碼。
但是多數搜索引擎都不能很好的支持GBK漢字搜索,大陸地區的搜索引擎有些能不完善的支持GBK漢字檢索。
其實,GBK是又一個漢字編碼標準,全稱《漢字內碼擴展規范》(ChineseInternatialCodeSpecification),1995年頒布。GB是國標,K是漢字“擴展”的漢語拼音第一個字母。
GBK向下與GB-2312編碼兼容,向上支持ISO10646.1國際標準,是前者向后者過渡的一個承啟標準。
GBK規范收錄了ISO10646.1中的全部CJK漢字和符號,并有所補充。具體包括:GB2312中的全部漢字、非漢字符號;GB13000.1中的其他CJK漢字。以上合計20902個GB化漢字;《簡化總表中》未收入GB13000.1的52個漢字;《康熙字典》以及《辭海》中未被收入GB13000.1的28個部首及重要構件;13個漢字結構符;BIG-5中未被GB2312收入、但存在于GB13000.1的139個圖形符號;GB12345增補的6個拼音符號;GB12345增補的19個豎排圖形符號(GB12345較GB2312增補豎排標點符號29個,其中10個未被GB13000.1收入,故GBK亦不收);從GB13000.1的CJK兼容區挑選出的21個漢字;GB13000.1收入的31個IBMOS/2專用符號。GBK亦采用雙字節表示,總體編碼范圍為0x8140~0xFEFE之間,首字節在0x81~0xFE之間,尾字節在0x40~0xFE之間,剔除0x××7F一條線,總計23940個碼位,共收入21886個漢字和圖形符號,其中漢字(包括部首和構件)21003個,圖形符號883個。
4.BIG5碼:
BIG5碼是針對繁體漢字的漢字編碼,目前在臺灣、香港的電腦系統中得到普遍應用。BIG5碼的編碼范圍參考下文。
5.HZ碼:
HZ碼是在Internet上廣泛使用的一種漢字編碼。“HZ”方案的特點,是以“純國標”的中文與美標碼混用。那么“HZ”是怎樣區分國標符和美標符的呢?答案其實也很簡單:當一串美標碼中間插入一段國標碼的時候,我們便在國標碼的前面加上~,后面加上~。這些附加碼分別叫“逃出碼”和“逃入碼”。由于這些附加碼本身也是美標形象碼,整個文件就儼然是一個美標文本文件,可以安然地在電腦網上傳遞,也和大部分英文文本處理軟件兼容。
6.ISO-2022CJK碼:
ISO-2022是國際標準組織(ISO)為各種語言字符制定的編碼標準。采用二個字節編碼,其中漢語編碼稱ISO-2022CN,日語、韓語的編碼分別稱JP、KR。一般將三者合稱CJK碼。目前CJK碼主要在Internet網絡中使用。
7.UCS和ISO10646:
1993年,國際標準ISO10646定義了通用字符集(UniversalCharacterSet,UCS)。UCS是所有其他字符集標準的一個超集。它保證與其他字符集是雙向兼容的。就是說,如果你將任何文本字符串翻譯到UCS格式,然后再翻譯回原編碼,你不會丟失任何信息。
UCS包含了用于表達所有已知語言的字符。不僅包括拉丁語,希臘語,斯拉夫語,希伯來語,阿拉伯語,亞美尼亞語和喬治亞語的描述,還包括中文,日文和韓文這樣的象形文字,以及平假名,片假名,孟加拉語,旁遮普語果魯穆奇字符(Gurmukhi),泰米爾語,印.埃納德語(Kannada),Malayalam,泰國語,老撾語,漢語拼音(Bopomofo),Hangul,Devangari,Gujarati,Oriya,Telugu以及其它語種。對于還沒有加入的語言,由于正在研究怎樣在計算機中最好地編碼它們,因而最終它們都將被加入。這些語言包括Tibetian,高棉語,Runic(古代北歐文字),埃塞俄比亞語,其他象形文字,以及各種各樣的印-歐語系的語言,還包括挑選出來的藝術語言比如Tengwar,Cirth和克林貢語(Klingon)。UCS還包括大量的圖形的,印刷用的,數學用的和科學用的符號,包括所有由TeX,Postscript,MS-DOS,MS-Windows,Macintosh,OCR字體,以及許多其他字處理和出版系統提供的字符。
ISO10646定義了一個31位的字符集。然而,在這巨大的編碼空間中,迄今為止只分配了前65534個碼位(0x0000到0xFFFD)。這個UCS的16位子集稱為基本多語言面(BasicMultilingualPlane,BMP)。將被編碼在16位BMP以外的字符都屬于非常特殊的字符(比如象形文字),且只有專家在歷史和科學領域里才會用到它們。按當前的計劃,將來也許再也不會有字符被分配到從0x000000到0x10FFFF這個覆蓋了超過100萬個潛在的未來字符的21位的編碼空間以外去了。ISO10646-1標準第一次發表于1993年,定義了字符集與BMP中內容的架構。定義BMP以外的字符編碼的第二部分ISO10646-2正在準備中,但也許要過好幾年才能完成。新的字符仍源源不斷地加入到BMP中,但已經存在的字符是穩定的且不會再改變了。
UCS不僅給每個字符分配一個代碼,而且賦予了一個正式的名字。表示一個UCS或Unicode值的十六進制數,通常在前面加上“U+”,就象U+0041代表字符“拉丁大寫字母A”。UCS字符U+0000到U+007F與US-ASCII(ISO646)是一致的,U+0000到U+00FF與ISO8859-1(Latin-1)也是一致的。從U+E000到U+F8FF,已經BMP以外的大范圍的編碼是為私用保留的。
1993年,ISO10646中定義的USC-4(UniversalCharacterSet),使用了4個字節的寬度以容納足夠多的相當可觀的空間,但是這個過于肥胖的字符標準在當時乃至現在都有其不現實的一面,就是會過分侵占存儲空間并影響信息傳輸的效率。與此同時,Unicode組織于約10年前以Universal,Unique和Uniform為主旨也開始開發一個16位字符標準,為避免兩種16位編碼的競爭,1992年兩家組織開始協商,以期折衷尋找共同點,這就是今天的UCS-2(BMP,BasicMultilingualPlane,16bit)和Unicode,但它們仍然是不同的方案。
8.Unicode碼:
關于Unicode我們需要追溯一下它產生的淵源。
當計算機普及到東亞時,遇到了使用表意字符而非字母語言的中、日、韓等國家。在這些國家使用的語言中常用字符多達幾千個,而原來字符采用的是單字節編碼,一張代碼頁中最多容納的字符只有28=256個,對于使用表意字符的語言是在無能為力。既然一個字節不夠,自然人們就采用兩個字節,所有出現了使用雙字節編碼的字符集(DBCS)。不過雙字節字符集中雖然表意字符使用了兩個字節編碼,但其中的ASCII碼和日文片假名等仍用單字節表示,如此一來給程序員帶來了不小的麻煩,因為每當設計到DBCS字符串的處理時,總是要判斷當中的一個字節到底表示的是一個字符還是半個字符,如果是半個字符,那是前一半還是后一半?由此可見DBCS并不是一種非常好的解決方案。
人們在不斷尋找這更好的字符編碼方案,最后的結果就是Unicode誕生了。Unicode其實就是寬字節字符集,它對每個字符都固定使用兩個字節即16位表示,于是當處理字符時,不必擔心只處理半個字符。
目前,Unicode在網絡、Windows系統和很多大型軟件中得到應用。關于GB編碼的一些常識GB編碼標準中,比較常用的是GB2312和GBK兩種,GB2312是GBK的一個子集,GB2312編碼范圍是0xA1A1-0xFEFE,如果純粹的GB2312編碼,處理起來是十分簡單的,但處理GBK字符集時有些小的提示,先說說GBK編碼的標準吧:
GBK采用雙字節表示,總體編碼范圍為8140-FEFE,首字節在81-FE之間,尾字節在40-FE之間,剔除xx7F一條線。總計23940個碼位,共收入21886個漢字和圖形符號,其中漢字(包括部首和構件)21003個,圖形符號883個。
全部編碼分為三大部分:
1.漢字區。包括:
a.GB2312漢字區。即GBK/2:B0A1-F7FE。收錄GB2312漢字6763個,按原順序排列。
b.GB13000.1擴充漢字區。包括:
(1)GBK/3:8140-A0FE。收錄GB13000.1中的CJK漢字6080個。
(2)GBK/4:AA40-FEA0。收錄CJK漢字和增補的漢字8160個。
CJK漢字在前,按UCS代碼大小排列;增補的漢字(包括部首和構件)在后,按《康熙字典》的頁碼/字位排列。
2.圖形符號區。包括:
a.GB2312非漢字符號區。即GBK/1:A1A1-A9FE。其中除GB2312的符號外,
還有10個小寫羅馬數字和GB12345增補的符號。計符號717個。
b.GB13000.1擴充非漢字區。即GBK/5:A840-A9A0。BIG-5非漢字符號、結構符和“○”排列在此區。計符號166個。
3.用戶自定義區:分為(1)(2)(3)三個小區。
(1)AAA1-AFFE,碼位564個。
(2)F8A1-FEFE,碼位658個。
(3)A140-A7A0,碼位672個。
第(3)區盡管對用戶開放,但限制使用,因為不排除未來在此區域增補新字符的可能性。
這里有幾個小技巧:
一、在php中,字符編碼是按所發送的編碼為準的,因些使用的就是用戶輸入的編碼,不會自動改變,但在asp中,默認的編碼是unicode,這樣我們很容易就能得到gbk->unicode的編碼對照表,這樣即使在毫無基礎庫的情況下也能很容易的實現gbk到utf-8的轉換了;
二、由于GBK是高位最低數值是0x40,即是64,因此,有時候組織一些涉及中文的字串時,分割字符最好用64之前的ascii碼,這樣在任意情況下替換或分割都不會出現亂碼,比較常用的是","、";"、":"、""、""、"",這些字符永遠都不會給gb編碼添亂。編碼的種類編碼(Encoding)在認知上是解釋傳入的刺激的一種基本知覺的過程。技術上來說,這是一個復雜的、多階段的轉換過程,從較為客觀的感覺輸入(例如光、聲)到主觀上有意義的體驗。
字符編碼(Characterencoding)是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈沖)進行配對。
文字編碼(Textencoding)使用一種標記語言來標記一篇文字的結構和其他特征,以方便計算機進行處理。
語義編碼(Semanticsencoding),以正式語言乙對正式語言甲進行語義編碼,即是使用語言乙表達語言甲所有的詞匯(如程序或說明)的一種方法。
電子編碼(Electronicencoding)是將一個信號轉換成為一個代碼,這種代碼是被優化過的以利于傳輸或存儲。轉換工作通常由一個編解碼器完成。
神經編碼(Neuralencoding)是指信息在神經元中被如何描繪的方法。
記憶編碼(Memoryencoding)是把感覺轉換成記憶的過程。
加密(Encryption)是為了保密而對信息進行轉換的過程。
譯碼(Transcoding)是將編碼從一種格式轉換到另一種格式的過程。字符集編碼轉換輕松實現一、利用iconv函數族進行編碼轉換
在LINUX上進行編碼轉換時,既可以利用iconv函數族編程實現,也可以利用iconv命令來實現,只不過后者是針對文件的,即將指定文件從一種編碼轉換為另一種編碼。
iconv函數族的頭文件是iconv.h,使用前需包含之。
#include
iconv函數族有三個函數,原型如下:
(1)iconv_ticonv_open(constchar*tocode,constchar*fromcode);
此函數說明將要進行哪兩種編碼的轉換,tocode是目標編碼,fromcode是原編碼,該函數返回一個轉換句柄,供以下兩個函數使用。
(2)size_ticonv(iconv_tcd,char**inbuf,size_t*inbytesleft,char**outbuf,size_t*outbytesleft);
此函數從inbuf中讀取字符,轉換后輸出到outbuf中,inbytesleft用以記錄還未轉換的字符數,outbytesleft用以記錄輸出緩沖的剩余空間。(3)inticonv_close(iconv_tcd);
此函數用于關閉轉換句柄,釋放資源。
例子1:用C語言實現的轉換示例程序
/*f.c:代碼轉換示例C程序*/
#include
#defineOUTLEN255
main()
{
char*in_utf8="姝e?ㄥ??瑁?";
char*in_gb2312="正在安裝";
charout[OUTLEN];
//unicode碼轉為gb2312碼
rc=u2g(in_utf8,strlen(in_utf8),out,OUTLEN);
printf("unicode-->gb2312out=%sn",out);
//gb2312碼轉為unicode碼
rc=g2u(in_gb2312,strlen(in_gb2312),out,OUTLEN);
printf("gb2312-->unicodeout=%sn",out);
}
//代碼轉換:從一種編碼轉為另一種編碼
intcode_convert(char*from_charset,char*to_charset,char*inbuf,intinlen,char*outbuf,intoutlen)
{
iconv_tcd;
intrc;
char**pin=&inbuf;
char**pout=&outbuf;
cd=iconv_open(to_charset,from_charset);
if(cd==0)return-1;
memset(outbuf,0,outlen);
if(iconv(cd,pin,&inlen,pout,&outlen)==-1)return-1;
iconv_close(cd);
return0;
}
//UNICODE碼轉為GB2312碼
intu2g(char*inbuf,intinlen,char*outbuf,intoutlen)
{
returncode_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312碼轉為UNICODE碼
intg2u(char*inbuf,size_tinlen,char*outbuf,size_toutlen)
{
returncode_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
例子2:用C++語言實現的轉換示例程序
/*f.cpp:代碼轉換示例C++程序*/
#include
#include
#defineOUTLEN255
usingnamespacestd;
//代碼轉換操作類
classCodeConverter{
private:
iconv_tcd;
public:
//構造
CodeConverter(constchar*from_charset,constchar*to_charset){
cd=iconv_open(to_charset,from_charset);
}
//析構
~CodeConverter(){
iconv_close(cd);
}
//轉換輸出
intconvert(char*inbuf,intinlen,char*outbuf,intoutlen){
char**pin=&inbuf;
char**pout=&outbuf;
memset(outbuf,0,outlen);
returniconv(cd,pin,(size_t*)&inlen,pout,(size_t*)&outlen);
}
};
intmain(intargc,char**argv)
{
char*in_utf8="姝e?ㄥ??瑁?";
char*in_gb2312="正在安裝";
charout[OUTLEN];
//utf-8-->gb2312
CodeConvertercc=CodeConverter("utf-8","gb2312");
cc.convert(in_utf8,strlen(in_utf8),out,OUTLEN);
cout<<"utf-8-->gb2312in="<
//gb2312-->utf-8
CodeConvertercc2=CodeConverter("gb2312","utf-8");
cc2.convert(in_gb2312,strlen(in_gb2312),out,OUTLEN);
cout<<"gb2312-->utf-8in="<
}
二、利用iconv命令進行編碼轉換
在LINUX上進行編碼轉換時,既可以利用iconv函數族編程實現,也可以利用iconv命令來實現,只不過后者是針對文件的,即將指定文件從一種編碼轉換為另一種編碼。
iconv命令用于轉換指定文件的編碼,默認輸出到標準輸出設備,亦可指定輸出文件。
用法:iconv[選項...][文件...]
有如下選項可用:
輸入/輸出格式規范:
-f,--from-code=名稱原始文本編碼
-t,--to-code=名稱輸出編碼
信息:
-l,--list列舉所有已知的字符集
輸出控制:
-c從輸出中忽略無效的字符
-o,--output=FILE輸出文件
-s,--silent關閉警告
--verbose打印進度信息
-?,--help給出該系統求助列表
--usage給出簡要的用法信息
-V,--version打印程序版本號
例子:
iconv-futf-8-tgb2312aaa.txt>bbb.txt
這個命令讀取aaa.txt文件,從utf-8編碼轉換為gb2312編碼,其輸出定向到bbb.txt文件。
小結:LINUX為我們提供了強大的編碼轉換工具,給我們帶來了方便。
原創質感面料選邦巨
咨詢即獲免費設計開發方案
18927502276
18927502276
ben.xiong@youranfp.cn