如何在Windows日语系统中打印日语字符

How to print Japanese character in windows Japanese system?

本文关键字:日语 打印 字符 系统 Windows      更新时间:2023-10-16

我写了一个小程序,它将日语字符串作为硬编码值,并将其写入日语系统中的文件中。该程序是用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;
}

生成输出:

Msg:スプールがいっぱいです

Msg:スプールがいっぱいです

如果没有更多信息,我无法说出的是,您的代码中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

生成输出:

Msg:スプールがいっぱいです

Msg:スプールがいっぱいです