ANSI、MBCSとUNICOD


現在、コンピュータで最も広く使われている文字セットとその符号化は、アメリカ国家標準局(ANSI)が制定したASCIIコード(American Standard Code for Information Interchange、アメリカ標準情報交換コード)であり、国際標準化機構(ISO)によって国際標準と定められ、ISO 646標準と呼ばれている.ASCIIコードはすべてのラテン文字に適用され、7ビットのバイナリ数で符号化され(その最上位(bit 7)はパリティビットとして使用され)、128文字を表すことができる.
0~32番および127番(計34個)は、制御子:LF(改行)、CR(リターン)、FF(ページング)、DEL(削除)、BEL(ベル)など、制御文字または通信専用文字である.
第33~126番(計94個)は文字で、そのうち第48~57番は0~9 10個のアラビア数字である.65~90番は26大文字、97~122番は26小文字、残りは句読点、演算記号などです.
ASCIIコードは1バイトを占有し、正確には7ビットである.漢字はASCIIコードの後に現れるので、漢字のコードはASCIIコードと互換性がある必要があります.もう一つの問題は、漢字の数が多く、簡単な1バイトでは表現できないことです(1バイト、支えて256文字しか表現できません.ASCIIコードを除いて128文字しか使えません).そのため、賢い中国人は2バイトで漢字を表現することにした.ASCIIコードが7ビットを占有した歴史的理由から,この賢い符号化方式は,連続する2バイトに対して2バイトのbit 7がいずれも1の場合にのみ,この2バイトを合わせて1つの漢字を表すと考えられる.このような異なる長さの混在符号化方法は、通常、「MBCS(Muilti-Bytes Charecter Set、マルチバイト文字セット)」と呼ばれ、「中国語ABC」というテキストのように、バイト数が2である可能性がある.×図4〜12に示すように、2+3=7である.
 
図4-12 MBCS下中国語とアルファベットの記憶長さ
このようなコードはとても良くて、しかもASCIIコードと互換性があります.このコードはGB 2312(国標2312、GBは国標の略)と呼ばれている.GB 2312はその後、GBK(国標拡張コード)に拡張され、GB 18030にも拡張された.また、BIG 5、JISなどの符号化基準は、国や地域によって異なる.異なる符号化間は互いに互換性がなく、情報が国際的に交流している間に、2つの言語に属する文字を同じ符号化されたテキストに格納することができず、UNICODが浮上した.
国際間の情報交流をより便利にするため、国際標準化機構(ISO)はUNICode文字セットを制定し、各種言語の各文字に統一的で唯一のデジタル番号を設定し、言語間、プラットフォーム間でテキスト変換、処理の要求を満たす.
UNICODが作成を開始すると,コンピュータのメモリ容量は大きく発展し,すなわち空間は二度と問題にならない.そこでISOは、すべての文字を2バイト、つまり16ビットで統一して表示しなければならないことを直接規定しており、ASCIIの「半角」文字については、UNICodeは元の符号化をそのまま維持し、その長さを元の8ビットから16ビットに拡張するだけで、英語のアルファベット「A」のように、その符号化は「00000000 011000001」になる.「半角」の英語記号は低8ビットしか使用できないため、高8ビットは永遠に0であることは明らかだ.そのため、このような大気の方案は純粋な英語のテキストを保存する時に倍の空間を浪費します.他の文化や言語の文字はすべて再統一符号化されます.例えば、「中」のUNICODは「01001110 00101101」である.
これで、そんなに面倒なことはなく、すべての文字が2バイト固定されています.「中国語ABC」のように、バイト数は5です.×図4〜13に示すように、2=10である.従って、UNICode符号化により格納される文字は、ワイドバイト文字とも呼ばれる.
 
図4-13 UNICOD下中国語とアルファベットの記憶長さ
標準C++では、MBCSまたはANSIの文字列を定義できます.
 
    
    
    
    
  1. char msg[] = " C++"

UNICodeの文字列を定義します.L接頭辞、すなわち:
    
    
    
    
  1. wchar_t msg[] = L" C++"

UNICodeは天下を統一しているが、客観的な事実は、すべてのアプリケーション(航空会社の注文システムを含む)が一夜にしてUNICode符号化に変換されないため、プログラマーが直面している新しい問題は、適応符号化のプログラムをどのように作成するかである.どのようにして様々な符号化間の変換を完了しますか?
 
===============================
以上より抜粋
《把脈VC++》第4.5.2小節の内容は、転載して出典を明記してください.