C言語の標準関数を目的別に調べることができる辞典

ホーム > C 標準関数逆引き辞典 > ロケール > ロケールを設定する

C 標準関数逆引き辞典

:: reverse dictionary ::

文字列

※ソースファイルについて


ロケールを設定する

ロケールを設定するには、setlocale 関数を使います。

≪宣言≫

#include <locale.h>
#include <stdio.h>
wchar_t str[] = L"Cプログラム";
char *locale;

/* ロケールを日本語に設定 */
locale = setlocale(LC_ALL, "ja");
printf("locale=%s\n", locale);

wprintf(L"str=%s\n", str);

ソースファイル

次のような出力になります。(Windows の場合)

locale=Japanese_Japan.932
str=Cプログラム

▼ 関数

char *setlocale(int c, const char *l)

カテゴリ c のロケールに新しいロケール l を設定します。

ロケールの設定に成功した場合は、設定したロケールの名前へのポインタを返します。 ロケールの設定に失敗した場合は、NULL を返します。

●引数

c … ロケール l を設定するカテゴリ
l … 新しく設定するロケールの名前

●戻り値

・設定に成功 … 設定したロケールの名前へのポインタ
・設定に失敗 … NULL


カテゴリ c には、次の定数のいずれかを指定します。

定数 影響範囲 影響する関数
LC_ALL 下記の影響範囲のすべて 下記の関数のすべて
LC_COLLATE ロケールに基づく文字列の照合 strcoll
strxfrm
wcscoll
LC_CTYPE 文字および文字列の処理 文字処理関数
文字列処理関数
LC_MONETARY 通貨の書式 localeconv
LC_NUMERIC 数値の書式
(小数点や3桁ごとの区切り)
出力関数( printf など)
変換関数( atof など)
localeconv
LC_TIME 日付と時刻の書式 strftime
wcsftime

ロケール l は、次の書式で指定します。

<Windows の場合>
言語コード[_国コード][.コードページ]

例 1)  "ja"
例 2)  "japanese"
例 3)  "japanese_japan"
例 4)  "japanese_japan.932"

<Unix/Linux の場合>
言語コード[_国コード][.コードセット]

例 1)  "japanese"
例 2)  "ja"
例 3)  "ja_JP"
例 4)  "ja_JP.eucJP"

(1) 言語コード

通常は、ISO 639 で定義されている言語コードを指定します。
OS によっては、言語のスペルを指定できます。

主な言語コードは、次のとおりです。

言語コード 言語 スペル
cs チェコ語 czech
da デンマーク語 danish
de ドイツ語 german
el ギリシャ語 greek
en 英語 english
es スペイン語 spanish
fi フィンランド語 finnish
fr フランス語 french
hu ハンガリー語 hungarian
is アイスランド語 icelandic
it イタリア語 italian
ja 日本語 japanese
ko 韓国語 korean
nl オランダ語 dutch
no ノルウェー語 norwegian
pl ポーランド語 polish
pt ポルトガル語 portuguese
ru ロシア語 russian
sk スロバキア語 slovak
sv スウェーデン語 swedish
tr トルコ語 turkish
zh 中国語 chinese

(2) 国コード

通常は、ISO 3166 で定義されている国コードを指定します。
(Windows は3文字、Unix/Linux は2文字を使用)

OS によっては、国・地域のスペルを指定できます。

主な国コードは、次のとおりです。

国コード 国・地域 スペル
2文字 3文字
AT AUT オーストリア austria
AU AUS オーストラリア australia
BE BEL ベルギー belgium
BR BRA ブラジル brazil
CA CAN カナダ canada
CH CHE スイス switzerland
CN CHN 中国 china
pr china
pr-china
CZ CZE チェコ czech
DE DEU ドイツ germany
DK DNK デンマーク denmark
ES ESP スペイン spain
FI FIN フィンランド finland
FR FRA フランス france
GB GBR イギリス britain
england
great britain
united kingdom
united-kingdom
GR GRC ギリシャ greece
HK HKG 香港 hong kong
hong-kong
HU HUN ハンガリー hungary
IE IRL アイルランド ireland
IS ISL アイスランド iceland
IT ITA イタリア italy
JP JPN 日本 japan
KR KOR 韓国 korea
south korea
south-korea
MX MEX メキシコ mexico
NL NLD オランダ holland
netherlands
NO NOR ノルウェー norway
NZ NZL ニュージーランド new zealand
new-zealand
PL POL ポーランド poland
PT PRT ポルトガル portugal
RU RUS ロシア russia
SE SWE スウェーデン sweden
SG SGP シンガポール singapore
SK SVK スロバキア slovak
TR TUR トルコ turkey
TW TWN 台湾 taiwan
US USA アメリカ america
united states
united-states

(3) コードページ、コードセット

Windows では、「コードページ」を指定します。
コードページとは、文字コードを表す数字のことです。

言語や国によって、使用できるコードページは異なります。
主なコードページは、次のとおりです。

コードページ 文字コード
932 Shift-JIS
1200 UTF-16 Little Endian
1201 UTF-16 Big Endian
1250 Windows 3.1 Eastern European
1251 Windows 3.1 Cyrillic
1252 Windows 3.1 US (ANSI)
1253 Windows 3.1 Greek
1254 Windows 3.1 Turkish
12000 UTF-32
12001 UTF-32 Big Endian
20127 US-ASCII
28591 ISO-8859-1
50220 ISO-2022-JP
51932 EUC-JP
65000 UTF-7
65001 UTF-8

Unix/Linux では、「コードセット」を指定します。 コードセットは、文字コードと同じ、またはそれに近い文字列で構成されています。

主なコードセットは、次のとおりです。

コードセット 文字コード
eucJP EUC-JP
ISO-2022-JP ISO-2022-JP
ISO-8859-1 ISO-8859-1
SJIS Shift-JIS
UTF-8 UTF-8

既定のロケールは "C" です。
このロケールでは、ワイド文字列を扱う関数で全角文字が処理されません。

例えば wprintf 関数では、全角文字が出力されません。

wchar_t str[] = L"Cプログラム";

wprintf(L"str=%s\n", str);

次のような出力になります。(Windows の場合)

str=C

ワイド文字列を扱う場合は、全角文字を処理できるロケールを指定した setlocale 関数を呼ぶ必要があります。


ロケール l には、"" (空の文字列)または NULL を指定できます。

"" を指定した場合は、プラットフォームのロケールを使って設定します。

Windows の場合は "Japanese_Japan.932" 、Unix/Linux の場合は "ja_JP.eucJP" になります。

NULL を指定した場合は、現在設定されているロケールを取得します。
(ロケールの設定は変更されません)

char *lcctype;
char *lctime;

lcctype = setlocale(LC_CTYPE, NULL);
lctime = setlocale(LC_TIME, NULL);

ソースファイル

lcctype"C"lctime"C" になります。

注目キーワード ベスト5

  1. セキュリティ
  2. ホスティング
  3. レンタルサーバ
  4. ファイル復旧
  5. ハードディスク修復

ロケール - locale -


ホーム > C 標準関数逆引き辞典 > ロケール > ロケールを設定する

Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com