Windows API国際化プログラミング
UNICODE対応
WindowsにおけるUNICODE対応には本来、深い知識と理解が必要ですが、
ここでは最低限の基本項目について言及します。UNICODE対応の目的は、
異なる言語の文字データを統一的に扱えるようにすることです。
- 文字列にはTCHARを使用する
- tchar.hをインクルードし、文字列格納には、TCHAR型を使う。
TCHARはUNICODEが定義されているときはWCHAR、されていないときはchar型を指します。
- リテラル部分は_Tまたは_TEXTマクロで囲む。
(たとえば _T("Hello!"))
- TCHAR対応の処理にする
- アプリケーションのエントリポイントにはWinMainではなく、TCHAR対応の_tWinMainを使う。
- TCHAR対応(マルチバイト/ユニコード両対応)の関数を使う。(※対応表は以下参照。)
(たとえば strcpy -> _tcscpy)
- UNICODEオプションをつける
- ソースファイルは可能であればUTF-8で作成し、UNICODEオプション(UNICODE、_UNICODE)を付けてコンパイルする。
*Visual C++ 6.0を使う場合は、以下の設定が必要です。
1. プロジェクト設定のC/C++タブで「一般」を選択し、「_MBCS」を削除し、
「UNICODE」と「_UNICODE」を追加します(「Release」と「Debug」の両方必要です)。
2. プロジェクト設定のリンクタブで「アウトプット」を選択し、「エントリポイントシンボル」に
「wWinMainCRTStartup」を指定します(「Release」と「Debug」の両方必要です)。
3. MFCを使う場合は、「ATL MFC 共有ライブラリ Unicode」と「ATL MFC スタティックライブラリ Unicode」を
Visual StudioのCDからインストールします。
マルチバイト関数、ユニコード関数、TCHAR(両対応)関数の主な対応は以下のようになります。
------------------------------------------------------------------------
マルチバイト ユニコード TCHAR 説明
------------------------------------------------------------------------
strcpy wcscpy _tcscpy 文字列をコピー
strncpy wcsncpy _tcsncpy 指定文字数分だけ文字列をコピー
strcat wcscat _tcscat 2つの文字列を連結
strncat wcsncat _tcsncat 2つの文字列を指定文字数分連結
strlen wcslen _tcslen 文字列の文字数を数える
strcmp wcscmp _tcscmp 文字列同士を比較し、等しければ0を返す
strncmp wcsncmp _tcsncmp 指定文字数分だけ文字列同士を比較し、等しければ0を返す
strstr wcsstr _tcsstr 文字列の中に指定した文字列が含まれていたら0以外を返す
sscanf swscanf _tscanf 文字列から対応する書式で指定した変数に値を格納
sprintf swprintf _stprintf 文字列変数に対してprintfする(指定の文字列変数に書式文字列を格納)
_scprintf _scwprintf _sctprintf 書式文字列をprintfした際の文字数を数える
strtok wcstok _tcstok 区切り文字を指定し、文字列から区切り文字ごとに文字列を抽出していく
strchr wcschr _tcschr 文字列内から指定の文字を探索し、その位置を返す
_strdup _wcsdup _tcsdup 文字列の領域を複製(主に文字列を返す関数で応用可能)
printf wprintf _tprintf DOS上に文字列を描画
scanf wscanf _tscanf DOS上で入力を指定の変数に格納
std::cout std::wcout なし DOS上に文字列を描画
std::cin std::wcin なし DOS上で入力を指定の変数に格納
fopen _wfopen _tfopen ファイルストリームを開く
fprintf fwprintf _ftprintf 指定のファイルストリームに書式付文字列を書き込む
fputs fputws _fputts 指定のファイルストリームに文字列を一行書き込む
fgets fgetws _fgetts 指定のファイルストリームから文字列を一行、指定の変数に読み込む
fscanf fwscanf _ftscanf ファイルストリームから対応する書式で指定した変数に値を格納
fgetc fgetwc _fgettc
fputc fputwc _fputtc
getc fgetwc _gettc
getchar getwchar _gettchar
gets getws _getts
putc putwc _puttc
puts putws _putts
strtod wcstod _tcstod
strtol wcstol _tcstol
strtoul wcstoul _tcstoul
atof _wtof _tstof
atol _wtol _tstol, _ttol
atoi _wtoi _tstoi, _ttoi
system _wsystem _tsystem
------------------------------------------------------------------------
国際化プログラミングトップへ
Copyright (C) 2012 Kokusaika JP, Inc.
本ドキュメントを無断で転載および引用することを禁じます。