開発環境 |
Microsoft Visual C++ 2010 Express (SP1) |
実行環境 |
Microsoft Windows XP Home Edition (SP3) |
プロジェクトの種類 |
Win32 コンソール アプリケーション |
プロジェクト名 |
test |
アプリケーションの種類 |
コンソール アプリケーション |
追加のオプション |
空のプロジェクト |
test1.c
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\n";
wprintf(L"%s", awcStr);
}
出力
ABC???
考察
改行まで出力されるが、あいうが?(0x3F)に変換される
test2.c
#include <locale.h>
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\n";
char* pcLocale;
pcLocale = setlocale(LC_CTYPE, "");
printf("pcLocale=[%s]\n", pcLocale);
wprintf(L"%s", awcStr);
}
出力
pcLocale=[Japanese_Japan.932]
ABCあいう
考察
CodePage932(Shift_JIS)に変換されて全て出力される
test3.c
#include <locale.h>
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";
char* pcLocale;
pcLocale = setlocale(LC_CTYPE, "");
printf("pcLocale=[%s]\n", pcLocale);
wprintf(L"%s", awcStr);
}
出力
pcLocale=[Japanese_Japan.932]
ABCあいう?
考察
printf系出力はロケールに依存する
変換できない文字は?(0x3F)に変換される
test4.c
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";
FILE* pFile;
fopen_s(&pFile, "a.txt", "wt,ccs=UNICODE");
fwprintf(pFile, L"%s", awcStr);
fclose(pFile);
}
出力
ABCあいう♥
考察
ファイル出力に関してはこれで問題ない
test5.c
#include <stdio.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";
FILE* pFile;
fopen_s(&pFile, "con", "wt,ccs=UNICODE");
fwprintf(pFile, L"%s", awcStr);
fclose(pFile);
}
出力
B C B0D0F0e&
考察
標準出力をファイルにリダイレクトしても0バイトのファイルが作成されるだけで
コンソールに出力される
ccsにUTF-8、UTF-16LEを指定しても文字化けする
test6.c
#include <Windows.h>
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";
HANDLE hConOut;
DWORD dwWritten;
hConOut = GetStdHandle(STD_OUTPUT_HANDLE);
WriteConsoleW(hConOut, awcStr, wcslen(awcStr), &dwWritten, NULL);
}
出力
ABCあいう♥
考察
標準出力をファイルにリダイレクトしても0バイトのファイルが作成されるだけで
コンソールにも出力されない
test7.c
#include <fcntl.h> // _O_WTEXT
#include <io.h> // _setmode
#include <stdio.h> // _fileno
void main()
{
wchar_t awcStr[] = L"ABCあいう\u2665\n";
_setmode(_fileno(stdout), _O_WTEXT);
wprintf(L"%s", awcStr);
}
出力
ABCあいう♥
考察
標準出力をファイルにリダイレクト可能
_O_WTEXT |
BOMなしUTF-16LE |
_O_U16TEXT |
BOMなしUTF-16LE |
_O_U8TEXT |
BOMなしUTF-8(UTF-8N) |
最終更新:2012年09月01日 16:43