Unicode対応
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/03/07 20:30 UTC 版)
「Windows API」の記事における「Unicode対応」の解説
各Win32が実装しているAPIWin 9xWin NTWin CEAYes Yes No W一部対応 Yes Yes Windows NT系では当初からUnicodeが用いられている一方、Unicodeに対応していないWin16と互換性を取るために、Win32 APIから同じAPIに対してマルチバイト文字版とUnicode版の2つを用意し、C/C++のマクロを駆使してコンパイル時にどちらを使うか選択できる仕組みが採用されている。なお、Unicodeの符号化には当初UCS-2が、Windows 2000から正式にUTF-16が用いられている。 具体的には、文字および文字列の関わる関数・構造体について、マルチバイト文字(Windowsコードページに基づく、日本語環境であればコードページ932)とUnicode (UTF-16) のどちらを与えることもできるように、2つの関数・構造体などが準備されている。その場合、マルチバイト文字列を与えるべき関数・構造体は末尾に「A」を付け、ワイド文字列を与えるべき関数・構造体は末尾に「W」を付けて区別している。例えば、Win16のMessageBox関数に対して、Win32ではMessageBoxAとMessageBoxWという2つの関数が用意されている。そして、プリプロセッサ識別子UNICODEの定義の有無によって切り替えが行われる。 #ifdef UNICODE#define MessageBox MessageBoxW#else#define MessageBox MessageBoxA#endif さらに、文字型に対しても同様にCHAR (charのtypedef) とWCHAR (wchar_tのtypedef) をUNICODEの定義に応じて切り替えるTCHAR型などや、ナロー文字列定数・リテラルとワイド文字列定数・リテラルを切り替えるTEXTマクロが存在する。 #ifdef UNICODE#define TEXT(s) L ## stypedef WCHAR TCHAR;#else#define TEXT(s) stypedef CHAR TCHAR;#endif これらを適切に用いると、1つのソースコードからコンパイル時のオプションによってマルチバイト文字を用いる実行プログラムとワイド文字を用いる実行プログラムの2種類が作成できる。以下はその例である。 #include
※この「Unicode対応」の解説は、「Windows API」の解説の一部です。
「Unicode対応」を含む「Windows API」の記事については、「Windows API」の概要を参照ください。
- unicode対応のページへのリンク