我编写了一个小程序,它将日语字符串作为硬编码值,并将其写入日语系统的文件中。该程序是在visual studio 2010(英文系统)中编写的
char szMsg_m[]="スプールがいっぱいです"; //input
string szMsg_s=("スプールがいっぱいです");
wchar_t szMsg_w[]=L"スプールがいっぱいです";
wstring szMsg_h=L"スプールがいっぱいです";
fprintf (trace.TraceFP, "\tMsg:%s \n", szMsg_m); //output
fprintf (trace.TraceFP, "\tMsg:%s \n", szMsg_s.c_str());
fwprintf (trace.TraceFP, L"\tMsg:%s \n", szMsg_w);
fwprintf (trace.TraceFP, L"\tMsg:%s \n", szMsg_h.c_str());
当我在日语系统中运行exe时,输出应该是日语为什么它会以(?)的形式出现
正如user694733指出的那样,你错过了std::locale::global (std::locale ("en_US.UTF-8"));
。我测试了以下内容:
#include <iostream>
#include <string>
#include <cstdio>
int main()
{
std::locale::global (std::locale ("en_US.UTF-8"));
char szMsg_m[]="スプールがいっぱいです"; //input
std::string szMsg_s=("スプールがいっぱいです");
fprintf (stdout, "\tMsg:%s \n", szMsg_m); //output
fprintf (stdout, "\tMsg:%s \n", szMsg_s.c_str());
return 0;
}
产生输出:
消息:假脱机已满
消息:假脱机已满
我无法分辨的是,如果没有更多信息,代码中的trace.TraceFP
是什么,以及如何使用它。
还有以下作用:
{
std::locale::global (std::locale ("en_US.UTF-8"));
wchar_t szMsg_w[]=L"スプールがいっぱいです";
std::wstring szMsg_h=L"スプールがいっぱいです";
fwprintf (stdout, L"\tMsg:%ls \n", szMsg_w);
fwprintf (stdout, L"\tMsg:%ls \n", szMsg_h.c_str());
}
请注意,宽字符串的正确格式是%ls
。
产生输出:
消息:假脱机已满
消息:假脱机已满