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日文系统如何打印日文字符?的主要内容,如果未能解决你的问题,请参考以下文章

将日文字符保存到 MySQL

更改正则表达式以允许英文和日文字符

PHPmailer 日文字符

如何在使用 utl_file write plsql 将数据写入 .csv 文件时处理中文/日文字符

Android:验证半角日文字符

将日文字符从 TextBox 存储到 SQL 表