如何在windows日文系统中打印日文字符?

问题描述 投票:2回答:1

我编写了一个小程序,它将日语字符串作为硬编码值,并将其写入日语系统的文件中。该程序是在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时,输出应该是日语为什么它会以(?)的形式出现

c++ c windows visual-studio cjk
1个回答
2
投票

正如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

产生输出:

消息:假脱机已满

消息:假脱机已满

© www.soinside.com 2019 - 2024. All rights reserved.