Windowsコアプログラミング(3)文字コードの詳細


一、文字コードの詳細
1.バイト(Byte)は、コンピュータ情報技術の記憶容量の単位である計量単位である
2.文字の意味:文字数計算機文字で使われる文字や記号、例えば1,2,3,4,~,@,!,%,^待ち受ける
3.異なる符号化において文字とバイトの対応関係が異なる
a.ASCLLコードでは、1つの英字(大文字と小文字を区別しない)が1バイト(8 bit)、1つの男が2バイト(16 bit)を占める
b.UTF-8符号化では、1つの英語文字が1バイトに等しく、1つの中国語(繁体字を含む)が3バイトに等しい
c.Unicode符号化では、1つの英語2バイト、1つの中国語(繁体字を含む)が2バイトを占める
d.英語記号は1バイト、中国語記号は2バイト
4.マルチ文字セット:各国の文字コードよ重なるコード(コード衝突)で文字化けし
a.最初、インターネット上には1つの文字セット---ANSのASCLL文字セットしかありませんでした.彼は7 bitsで1つの文字を表していました.
全部で128文字を表し、英字、数字、句読点を含み、その後拡張し、8 bitsで1文字を表す.
256文字を表すことができ、元の7 bitsに特殊文字を加えることができる.
b.その後各国の音声の加入、ASCLLはすでに需要を満たすことができなくて、各国はすべてASCLLの基礎の上で自分のを制定しました
ANSL標準から派生した文字セットをANSL文字セットと呼ぶことに慣れている文字セット
正式名称MBCS(Multi-Byte Chactacter System、すなわちマルチバイト文字システム)は、各言語に独自の文字セットがある
様々な文字セットが多すぎて、国際交流において非常に不便であるため、Unicode文字セットが提案され、
これは固定的に16 bits(2バイト、1文字)で1文字を表し、65535文字を表すことができ、世界中で
すべての音声常用文字が収録されている(Unicode規格はUTF-16と呼ばれている)が、後に2バイトのUnicodeを
既存の処理バイトシステム上で正しく伝送できるUTF-8が出現し、MBCS方式でUnicodeを符号化する.
UTF-8はUnicode文字セットに属する符号化であり、
5.Windowsはいくつかのデータ型を定義している
a.wchar_tは2バイトW付きでこのタイプです
b.WHAR Unicode文字彼は実はwchar_t 
c.PWSTR Unicode文字列へのポインタwchar_t *
d.PCWSTRは定数のUnicode const wchar_を指すt * 
e.マルチバイト対応タイプはCHAR,LPSTR,LPCSTR
f.ASNL/Unicode汎用データ型、
TCAHRマルチ文字セットはchar、Unicodeはwchar_t
PTSTRマルチ文字セットはchar*、Unicodeではwchar_t *
LPCTSTRマルチ文字セットはconst char*、Unicodeはconst wchar_t *
f.A付きはマルチ文字セット、WはUnicode、Tは汎用
7.Windowsにおけるマルチ文字セットとUnicodeの相互変換API
a.WideCharToMultiByte Unicode文字列からマルチバイト文字列へのマッピング
b.MultiByteToWideChar Unicode文字列へのマルチバイト文字列のマッピング
8.関数が上の関数で複雑な場合は、次のマクロ関数を使用できます.
使用前に識別子USES_を宣言するCONVERSION;
A 2 W:マルチバイトをワイドバイトにする
USES_CONVERSION
CString str;
char* AChar = "abcdefg";
wchar_t* WChar = A2W(AChar); 
str = WChar;

W 2 A:金バイトをマルチバイトに変換
USES_CONVERSION;
wchar_t* AChar = L"abcdefg ";
char* WChar = W2A(AChar);

T 2 A:Tは、システムに従ってマルチバイトを回転することを表す
USES_CONVERSION;  
char * pChar="char to cstring";  
CString cTemp=A2T(pChar);

T 2 W:システムタイプ振込バイト
SES_CONVERSION;  
CString cTemp =_T("char to cstring");  
char * pChar=A2T(pChar);

9.上記のマクロ関数変換を慎重に使用する
a.ループでこの関数を使用するとスタックオーバーフローを引き起こす可能性があります
コードを見るとalloc申請メモリが呼び出され、関数のスタックに割り当てられることがわかります.
VCコンパイラのデフォルトは2 Mで、この関数を1サイクルで呼び出すとメモリが割り当てられます.
b.解決策はWideCharToMultiByte MultiByteToWideCharを使用することが望ましい
この2つのAPIは、この2つのAPIをカプセル化して使用すると便利です.
10.THAR_を使用TEXTはUnicodeとマルチバイト文字セットを同時に適応できる