国際化

地域 (locale)

setlocale()

char *setlocale(
    int category,      // ロケールを適用するカテゴリ
    const char *locale // ロケール指定子
    );
wchar_t *_wsetlocale(
    int category,
    const wchar_t *locale
    );
setlocale、_wsetlocale | MSDN
categoryの値
定数 設定対象の関数など
LC_ALL 以下のすべて
LC_COLLATE strcoll、_stricoll、wcscoll、_wcsicoll、strxfrm、_strncoll、_strnicoll、_wcsncoll、_wcsnicoll、wcsxfrm
LC_CTYPE 文字列処理関数 (isdigit、isxdigit、mbstowcs、mbtowcを除く)
LC_MONETARY localeconv関数の通貨形式
LC_NUMERIC printfなどの通貨形式以外の小数点文字、桁区切り記号。localeconfのグループ化コントロールの文字列
LC_TIME strftime、wcsftime

locale次項の形式で指定し、たとえばShift_JISに設定するには次のようにします。

setlocale( LC_ALL, ".932" );

環境の既定値に初期化するには、空の文字列を指定します。

setlocale( LC_ALL, "" );

現在の設定を取得するには、localeをNULLとします。

printf( "%s\n", setlocale( LC_ALL, NULL ) );

locale

locale :: "locale_name"
        | "language[_country_region[.code_page]]"
        | ".code_page"
        | "C"
        | ""
        | NULL
  • en-US
  • bs-Cyrl-BA
  • Greek_Greece.ACP
  • English_United States.1254 … 英語_米国.ANSIトルコ語 (非推奨の形式)
  • Japanese_Japan.20932 … 日本語_日本.EUC-JP (非推奨の形式)

1文字に2バイト以上を必要とするUTF-7 (65000) やUTF-8 (65001) には、コードページとして設定できません。つまり、setlocale(LC_ALL,".65001")のようには指定できません。Windows 10のバージョン1803以降ならば、setlocale(LC_ALL, ".UTF8")のように指定できます。UTF-8 のサポート - setlocale, _wsetlocale | Microsoft Learn

文字 (character)

Unicode

関数 説明
GetTextCharset Retrieves a character set identifier for the font that is currently selected into a specified device context.
GetTextCharsetInfo Retrieves information about the character set of the font that is currently selected into a specified device context.
TranslateCharsetInfo Translates character set information and sets all members of a destination structure to appropriate values.
IsDBCSLeadByte Determines if a specified character is a lead byte for the system default Windows ANSI code page (CP_ACP).
IsDBCSLeadByteEx Determines if a specified character is potentially a lead byte.
IsTextUnicode Determines if a buffer is likely to contain a form of Unicode text.
MultiByteToWideChar Maps a character string to a UTF-16 (wide character) string.
WideCharToMultiByte Maps a UTF-16 (wide character) string to a new character string.
BytesToUnicode Do not use.
UnicodeToBytes Do not use.
NlsDllCodePageTranslation Do not use.
Unicode and Character Set Functions (Windows) | MSDN

MultiByteToWideChar

文字列 (LPCSTR) を、UTF-16文字列 (LPWSTR) へマップします。

int MultiByteToWideChar(
  _In_      UINT   CodePage,       // 変換に使用するコードページ
  _In_      DWORD  dwFlags,        // 変換タイプを指定するフラグ
  _In_      LPCSTR lpMultiByteStr, // 変換する文字列へのポインタ
  _In_      int    cbMultiByte,    // 変換する文字列のバイト数
  _Out_opt_ LPWSTR lpWideCharStr,  // 変換後の文字列を格納するバッファへのポインタ
  _In_      int    cchWideChar     // 変換後の文字列を格納するバッファの文字数
);
MultiByteToWideChar function (Windows) | MSDN MultiByteToWideChar 関数 | MSDN

WideCharToMultiByte

UTF-16文字列を、新しい文字列へマップします。

int WideCharToMultiByte(
  _In_      UINT    CodePage,         // 変換に使用するコードページ
  _In_      DWORD   dwFlags,          // 変換タイプを指定するフラグ
  _In_      LPCWSTR lpWideCharStr,    // 変換するUnicode文字列へのポインタ
  _In_      int     cchWideChar,      // 変換するUnicode文字列の文字数
  _Out_opt_ LPSTR   lpMultiByteStr,   // 変換後の文字列を格納するバッファへのポインタ
  _In_      int     cbMultiByte,      // 変換後の文字列を格納するバッファのバイト数
  _In_opt_  LPCSTR  lpDefaultChar,    // 指定のコードページで変換できなかったときに使用する文字へのポインタ
  _Out_opt_ LPBOOL  lpUsedDefaultChar // lpDefaultCharが使用されたときに設定されるフラグへのポインタ
);
WideCharToMultiByte function (Windows) | MSDN WideCharToMultiByte 関数 | MSDN
Microsoft Learnから検索