標準 C 言語国際化プログラミング
ワイド文字

C 言語では、日本語のように1文字の表現に2バイト以上を要するような文字 をサポートするために、以下の2通りの枠組みが用意されています。 国際化プログラミングにおいてはワイド文字の使用が推奨されます。ただし後 述するメッセージ処理などではマルチバイト文字を使用するなど、状況に応じ た使い分けが必要となります。

ワイド文字に関する C 言語標準ライブラリ関数には次のものがあります。

------------------------------------------------------------------------
関数		説明
------------------------------------------------------------------------
mbrtowc()	マルチバイト文字を対応するワイド文字に変換する (再開始可能)
mbtowc()	マルチバイト文字を対応するワイド文字に変換する
wcrtomb()	ワイド文字を対応するマルチバイト文字に変換する (再開始可能)
wctomb()	ワイド文字を対応するマルチバイト文字に変換する
mbsrtowcs()	マルチバイト文字列を対応するワイド文字列に変換する (再開始可能)
mbstowcs()	マルチバイト文字列を対応するワイド文字列に変換する
wcsrtombs()	ワイド文字列を対応するマルチバイト文字列に変換する (再開始可能)
wcstombs()	ワイド文字列を対応するマルチバイト文字列に変換する
wcscat()	ワイド文字列を他のワイド文字列の後に追加する
wcsncat()	ワイド文字列を他のワイド文字列の後に指定された文字数だけ追加する
wcscpy()	ワイド文字列を指定した場所にコピーする
wcsncpy()	ワイド文字列の先頭から指定した文字数を指定した場所にコピーする
wcscmp()	2つのワイド文字列をワイド文字のコード値で比較する
wcsncmp()	2つのワイド文字列を指定した文字だけワイド文字のコード値で比較する
wcscoll()	2つのワイド文字列を照合情報 (LC_COLLATE) に従って比較する
wcsxfrm()	ワイド文字を照合情報にしたがって比較用の特別なワイド文字列に変換する
wcschr()	ワイド文字列中で指定したワイド文字が最初に出現する場所を探す
wcsrchr()	ワイド文字列中で指定したワイド文字が最後に出現する場所を探す
wcspbrk()	ワイド文字列中で指定したワイド文字列中の文字のどれかと一致する場所を探す
wcsstr()	ワイド文字列中の一部が指定したワイド文字列と一致する場所を探す
wcstok()	ワイド文字列をトークンに分割する
wcsspn()	ワイド文字の先頭から指定したワイド文字列中の文字だけを含む部分の文字数を調べる
wcscspn()	ワイド文字の先頭から指定したワイド文字列中の文字を含まない部分の文字数を調べる
wcstod()	ワイド文字列を double 型の数値データに変換する
wcstol()	ワイド文字列を long int 型の数値データに変換する
wcstoul()	ワイド文字列を unsigned long int 型の数値データに変換する
wcsftime()	フォーマット・ワイド文字列にしたがって日付けや時間を表示する
wcslen()	ワイド文字列の文字数を調べる
iswalnum()	ワイド文字が alpha クラスまたは digit クラスかどうか調べる
iswalpha()	ワイド文字が alpha クラスかどうか調べる
iswcntrl()	ワイド文字が cntrl クラスかどうか調べる
iswdigit()	ワイド文字が digit クラスかどうか調べる
iswgraph()	ワイド文字が graph クラスかどうか調べる
iswlower()	ワイド文字が lower クラスかどうか調べる
iswprint()	ワイド文字が print クラスかどうか調べる
iswpunct()	ワイド文字が punct クラスかどうか調べる
iswspace()	ワイド文字が space クラスかどうか調べる
iswupper()	ワイド文字が upper クラスかどうか調べる
iswxdigit()	ワイド文字が xdigit クラスかどうか調べる
wctype()	ロケールに依存する文字クラスの情報を取得する
iswctype()	ワイド文字が指定された文字クラスかどうか調べる
towupper()	ワイド文字を小文字から大文字に変換する
towlower()	ワイド文字を大文字から小文字に変換する
wctrans()	ロケールに依存する文字変換の情報を取得する
towctrans()	ワイド文字を対応するワイド文字に変換する
wmemchr()	指定したメモり領域からワイド文字を検索する
wmemcmp()	指定した2つのメモり領域のワイド文字の並びを比較する
wmemcpy()	指定したメモリ領域のワイド文字の並びをコピーする
wmemmove()	指定したメモリ領域のワイド文字の並びを指定した場所へ移動する
wmemset()	指定したメモリ領域を指定したワイド文字で初期化する
fgetwc()	ストリームからワイド文字1文字を読み込む
getwc()		ストリームからワイド文字1文字を読み込む
getwchar()	標準入力からワイド文字1文字を読み込む
fgetws()	ストリームからワイド文字列を読み込む
ungetwc()	ワイド文字をストリームに戻す
fputwc()	ストリームへワイド文字1文字を書き込む
putwc()		ストリームへワイド文字1文字を書き込む
putwchar()	標準出力へワイド文字1文字を書き込む
fputws()	ストリームへワイド文字列を書き込む
fwscanf()	ストリームからフォーマット・ワイド文字列にしたがってデータを読み込む
swscanf()	ワイド文字バッファからフォーマット・ワイド文字列にしたがってデータを読み込む
wscanf()	標準入力からフォーマット・ワイド文字列にしたがってデータを読み込む
fwprintf()	ストリームにフォーマット・ワイド文字列にしたがってデータを書き込む
swprintf()	ワイド文字バッファにフォーマット・ワイド文字列にしたがってデータを書き込む
vfwprintf()	ストリームにフォーマット・ワイド文字列にしたがってデータを書き込む (引数を va_list 型で指定)
vswprintf()	ワイド文字バッファにフォーマット・ワイド文字列にしたがってデータを書き込む (引数を va_list 型で指定)
vwprintf()	標準出力にフォーマット・ワイド文字列にしたがってデータを書き込む (引数を va_list 型で指定)
wprintf()	標準出力にフォーマット・ワイド文字列にしたがってデータを書き込む
fwide()		ストリームの入力単位を設定する
wcswcs()	ワイド文字列中の一部が指定したワイド文字列と一致する場所を探す
wcwidth()	ワイド文字の出力幅 (カラム数) を求める
wcswidth()	ワイド文字列の出力幅 (カラム数) を求める
------------------------------------------------------------------------
一方マルチバイト文字に関する C 言語標準ライブラリ関数には次のものがあります。
------------------------------------------------------------------------
関数		説明
------------------------------------------------------------------------
mbrlen()	マルチバイト文字のバイト数を調べる (再開始可能)
mblen()		マルチバイト文字のバイト数を調べる
mbsinit()	初期状態かどうかを調べる
------------------------------------------------------------------------
標準ライブラリが提供するワイド文字関数と非ワイド文字関数の対応は次のとおりです。
----------------------------------------------------------------------------
非ワイド文字関数	ワイド文字関数
----------------------------------------------------------------------------
isalnum()	iswalnum()
isalpha()	iswalpha()
iscntrl()	iswcntrl()
isdigit()	iswdigit()
isgraph()	iswgraph()
islower()	iswlower()
isprint()	iswprint()
ispunct()	iswpunct()
isspace()	iswspace()
isupper()	iswupper()
isxdigit()	iswxdigit()
tolower()	towlower()
toupper()	towupper()
fprintf()	fwprintf()
fscanf()	fwscanf()
printf()	wprintf()   *1)
scanf()		wscanf()
sprintf()	swprintf()
sscanf()	swscanf()
vfprintf()	vwfprintf()
vprintf()	vwprintf()
vsprintf()	vswprintf()
fgetc()		fgetwc()
fgets()		fgetws()
fputc()		fputwc()
fputs()		fputws()
getc()		getwc()
getchar()	getwchar()
gets()		fgetws()
putc()		putwc()
puts()		fputws()
putchar()	putwchar()
ungetc()	ungetwc()
strtod()	wcstod()
strtol()	wcstol()
strtoul()	wcstoul()
memcpy()	wmemcpy()
memmove()	wmemmove()
strcpy()	wcscpy()
strncpy()	wcsncpy()
strncat()	wcsncat()
strcat()	wcscat()
memcmp()	wmemcmp()
strcmp()	wcscmp()
strcoll()	wcscoll()
strncmp()	wcsncmp()
strxfrm()	wcsxfrm()
memchr()	wmemchr()
strchr()	wcschr()
strcspn()	wcscspn()
strpbrk()	wcspbrk()
strrchr()	wcsrchr()
strspn()	wcsspn()
strstr()	wcsstr()
strtok()	wcstok()
memset()	wmemset()
strlen()	wcslen()
strftime()	wcsftime()
----------------------------------------------------------------------------
なおワイド文字を扱う関数のうち、以下のものは非推奨関数です。対応する推 奨ワイド文字関数を使用してください。
----------------------------------------------------------------------------
非推奨ワイド文字関数	推奨ワイド文字関数
----------------------------------------------------------------------------
btowc()			mbtowc()
wctob()			wctomb()
----------------------------------------------------------------------------
*1)printfは適切な変換文字("%ls")によってワイド文字の対応可能。

国際化プログラミングトップへ


Copyright (C) 2012 Kokusaika JP, Inc.
本ドキュメントを無断で転載および引用することを禁じます。