windows日文系统如何打印日文字符?
Posted
技术标签:
【中文标题】windows日文系统如何打印日文字符?【英文标题】:How to print Japanese character in windows Japanese system? 【发布时间】:2019-02-12 10:48:37 【问题描述】:我写了一个小程序,它将日文字符串作为硬编码值,并将其写入日文系统的文件中。程序用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.) 源文件和 2.) 输出设备/文件中使用什么编码? 顺便说一句,你不是在用 C 编程。C 语言没有std::string
数据类型。请相应地更新您的标签。
【参考方案1】:
正如 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
。
产生输出:
消息:スプールがいっぱいです
消息:スプールがいっぱいです
【讨论】:
我在 windows Visual Studio 或 dev c++ 中尝试过此操作,因为以下行出现运行时错误:std::locale::global (std::locale ("en_US.UTF-8")); 这个错误到底说了什么?如果可以,请复制该错误输出并将其作为编辑发布到您的问题中。那怎么样? 它是不是说缺少dll
文件?您可以尝试从命令行运行该程序。 CTRL+R
--> cmd
。在命令提示符下,您可以导航到生成二进制文件的位置并从那里运行它。相同的错误还是不同的错误?以上是关于windows日文系统如何打印日文字符?的主要内容,如果未能解决你的问题,请参考以下文章