文字コード変換
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* 文字コード変換 [#y5632853]
** コード [#md2b97c3]
*** ワイド文字列をマルチバイト文字列に変換 [#uab5f524]
[[WideCharToMultiByte():http://msdn.microsoft.com/ja-jp/l...
int WideCharToMultiByte(
UINT CodePage, // コードページ
DWORD dwFlags, // 処理速度とマッピング方法を...
LPCWSTR lpWideCharStr, // ワイド文字列のアドレス
int cchWideChar, // ワイド文字列の文字数
LPSTR lpMultiByteStr, // 新しい文字列を受け取るバッ...
int cchMultiByte, // 新しい文字列を受け取るバッ...
LPCSTR lpDefaultChar, // マップできない文字の既定値...
LPBOOL lpUsedDefaultChar // 既定の文字を使ったとき...
);
ex.)
wchar_t sText = L"いろはに";
char sDest [256];
DWORD dwLen = WideCharToMultiByte(
CP_ACP,
0,
(LPCWSTR)sText,
-1,
NULL,
0,
NULL,
NULL
);
WideCharToMultiByte(
CP_ACP,
0,
(LPCWSTR)sText,
-1,
sDest,
dwLen,
NULL,
NULL);
sDest[dwLen] = '\0';
CodePageがCP_UTF7、CP_UTF8の場合、lpDefaultCharとlpUsedDe...
ちなみに、[[wcstombs():http://msdn.microsoft.com/ja-jp/li...
ex.)
int mbs_len = wcstombs( NULL, msg, 0 );
char * mbs = new char [mbs_len + 1];
try {
wcstombs( mbs, msg, mbs_len + 1 );
} catch (...) {
}
delete mbs;
*** マルチバイト文字列をワイド文字列に変換 [#g67f0ce1]
[[MultiByteToWideChar():http://msdn.microsoft.com/ja-jp/l...
int MultiByteToWideChar(
UINT CodePage, // コードページ
DWORD dwFlags, // 文字の種類を指定するフラグ
LPCSTR lpMultiByteStr, // マップ元文字列のアドレス
int cchMultiByte, // マップ元文字列のバイト数
LPWSTR lpWideCharStr, // マップ先ワイド文字列を入れ...
int cchWideChar // バッファのサイズ
);
ex.)
char sText = "いろはに";
wchar_t sDest [256];
DWORD dwLen = MultiByteToWideChar(
CP_ACP,
0,
sText,
-1,
NULL,
0);
MultiByteToWideChar(
CP_ACP,
0,
sText,
-1,
sDest,
dwLen);
sDest[dwLen] = '\0';
[[mbstowcs():http://msdn.microsoft.com/ja-jp/library/k1f9...
** メモ [#g42eee42]
*** Unicode [#yb423d28]
ひとことで Unicode といってもいろんな文字セットがある。
とりあえず、[[Wikipedia の説明:http://ja.wikipedia.org/wi...
おそらく一番よく使われるのが UTF-8 だが、UTF-8 は 0x00 〜...
ちなみに、UTF-16 と UTF-32 には、先頭 2byte に BOM(Byte O...
ところで、本来 BOM が必要ない(LE/BE の区別がない)はずの U...
*** C++ 環境依存 [#racbab40]
wchar_t という型は「ワイド文字」と呼ばれるが、これは環境...
VC++ (Win32 環境?)&br;
wchar_t は 2byte, サロゲートペア部分を取り除いたBOMなしの...
UTF-16 には BE(big endian) と LE(little endian) の2種類が...
Windows 環境 (LE) の ワイド文字がなぜ UTF-16BEなのかは謎。
gcc (大抵の unix 環境)&br;
wchar_t は 4byte, 文字コードは UCS4。
*** VC++ の罠 [#f266565c]
VC++ では、コンパイラの設定によって、
デフォルトでマルチバイト文字セットを使うか、
Unicode を使うか、という設定がある。
VC++.NET 2003 なら、プロジェクトのプロパティの[構成プロパ...
_T というマクロは、文字列を環境デフォルトに変換するマクロ。
_T("あいうえお");
マルチバイトをデフォルトにしているが、ワイド文字列として...
L"あいうえお"
とする。
*** 文字列は必ず [#r23a71f9]
文字列を、バイト配列や vector で扱うときは、 null(0) 終端...
(std::string はどうなんだろう)&br;
char str [16];
...
str [15] = '\0';
std::vector<char> str;
...
str.push_back( 0 );
C/C++ の文字列のお約束。
-----
[[MLEXP. Wiki]]
終了行:
* 文字コード変換 [#y5632853]
** コード [#md2b97c3]
*** ワイド文字列をマルチバイト文字列に変換 [#uab5f524]
[[WideCharToMultiByte():http://msdn.microsoft.com/ja-jp/l...
int WideCharToMultiByte(
UINT CodePage, // コードページ
DWORD dwFlags, // 処理速度とマッピング方法を...
LPCWSTR lpWideCharStr, // ワイド文字列のアドレス
int cchWideChar, // ワイド文字列の文字数
LPSTR lpMultiByteStr, // 新しい文字列を受け取るバッ...
int cchMultiByte, // 新しい文字列を受け取るバッ...
LPCSTR lpDefaultChar, // マップできない文字の既定値...
LPBOOL lpUsedDefaultChar // 既定の文字を使ったとき...
);
ex.)
wchar_t sText = L"いろはに";
char sDest [256];
DWORD dwLen = WideCharToMultiByte(
CP_ACP,
0,
(LPCWSTR)sText,
-1,
NULL,
0,
NULL,
NULL
);
WideCharToMultiByte(
CP_ACP,
0,
(LPCWSTR)sText,
-1,
sDest,
dwLen,
NULL,
NULL);
sDest[dwLen] = '\0';
CodePageがCP_UTF7、CP_UTF8の場合、lpDefaultCharとlpUsedDe...
ちなみに、[[wcstombs():http://msdn.microsoft.com/ja-jp/li...
ex.)
int mbs_len = wcstombs( NULL, msg, 0 );
char * mbs = new char [mbs_len + 1];
try {
wcstombs( mbs, msg, mbs_len + 1 );
} catch (...) {
}
delete mbs;
*** マルチバイト文字列をワイド文字列に変換 [#g67f0ce1]
[[MultiByteToWideChar():http://msdn.microsoft.com/ja-jp/l...
int MultiByteToWideChar(
UINT CodePage, // コードページ
DWORD dwFlags, // 文字の種類を指定するフラグ
LPCSTR lpMultiByteStr, // マップ元文字列のアドレス
int cchMultiByte, // マップ元文字列のバイト数
LPWSTR lpWideCharStr, // マップ先ワイド文字列を入れ...
int cchWideChar // バッファのサイズ
);
ex.)
char sText = "いろはに";
wchar_t sDest [256];
DWORD dwLen = MultiByteToWideChar(
CP_ACP,
0,
sText,
-1,
NULL,
0);
MultiByteToWideChar(
CP_ACP,
0,
sText,
-1,
sDest,
dwLen);
sDest[dwLen] = '\0';
[[mbstowcs():http://msdn.microsoft.com/ja-jp/library/k1f9...
** メモ [#g42eee42]
*** Unicode [#yb423d28]
ひとことで Unicode といってもいろんな文字セットがある。
とりあえず、[[Wikipedia の説明:http://ja.wikipedia.org/wi...
おそらく一番よく使われるのが UTF-8 だが、UTF-8 は 0x00 〜...
ちなみに、UTF-16 と UTF-32 には、先頭 2byte に BOM(Byte O...
ところで、本来 BOM が必要ない(LE/BE の区別がない)はずの U...
*** C++ 環境依存 [#racbab40]
wchar_t という型は「ワイド文字」と呼ばれるが、これは環境...
VC++ (Win32 環境?)&br;
wchar_t は 2byte, サロゲートペア部分を取り除いたBOMなしの...
UTF-16 には BE(big endian) と LE(little endian) の2種類が...
Windows 環境 (LE) の ワイド文字がなぜ UTF-16BEなのかは謎。
gcc (大抵の unix 環境)&br;
wchar_t は 4byte, 文字コードは UCS4。
*** VC++ の罠 [#f266565c]
VC++ では、コンパイラの設定によって、
デフォルトでマルチバイト文字セットを使うか、
Unicode を使うか、という設定がある。
VC++.NET 2003 なら、プロジェクトのプロパティの[構成プロパ...
_T というマクロは、文字列を環境デフォルトに変換するマクロ。
_T("あいうえお");
マルチバイトをデフォルトにしているが、ワイド文字列として...
L"あいうえお"
とする。
*** 文字列は必ず [#r23a71f9]
文字列を、バイト配列や vector で扱うときは、 null(0) 終端...
(std::string はどうなんだろう)&br;
char str [16];
...
str [15] = '\0';
std::vector<char> str;
...
str.push_back( 0 );
C/C++ の文字列のお約束。
-----
[[MLEXP. Wiki]]
ページ名: