1月30日(2009)


mbstowcs_s()関数について…

以前の日記で、「マルチバイト文字⇒ワイド文字の変換はmbstowcs_s()のほうが
MultiByteToWideChar()よりもなんとなく簡単に使えるぜ」的な事を書いたのだが、
実際に使うと文字化けしていたことに気付いてしまった…。

どうやらロケールの問題らしい。まぁロケールっていうのは簡単に言うと国や地域依存の
表現が異なる値を扱うための規格(?)というかルール(?)というか、まぁそんな感じで、
値をどの地域のものとして扱うかというのを指定するものだと考えてみようか…。

ロケールに依存するカテゴリとしては、日付とか通貨などの表示形式などが挙げられる。

で、どうやらmbstowcs_s()関数はロケールに依存するらしく、デフォルト状態で
使うと日本になっていないっぽい感じ。

なので解決策としては以下の方法をとってみる。

"locale.h"

setlocale( LC_ALL, "Japanese" );
mbstowcs_s( &size, dst_buff, SIZE, src_buff, _TRUNCATE );

こんな感じでやると上手く日本語として変換された。
結構ロケールに影響される関数は多いっぽいので注意が必要か。
たいていそんな関数には xxxx_l()といったような_lが付加される。

ちなみにsetlocale()関数の戻り値は指定されたロケールおよびカテゴリに関連付けられている
文字列へのポインタとなっている(有効なロケールとカテゴリを指定した場合)

上記の例の場合は "Japanese_japan.932"が返ってくる。
最終更新:2009年01月30日 17:28
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。