Как напечатать японский символ в Windows японской системе? - PullRequest
0 голосов
/ 12 февраля 2019

Я написал небольшую программу, которая будет принимать японскую строку в качестве жестко закодированных значений и записывать ее в файл в японской системе.Программа написана в 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 в японской системе

1 Ответ

0 голосов
/ 12 февраля 2019

Как указал 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: 101 プ ー ル が い っ っ い で す

Msg: ス プ ー ル が い で * 10121013 *

Что я не могу сказать, без дополнительной информации, что такое 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:: ス プ ー ル が い っ ぱ 10 す 10

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...