C++ std::wofstream unicode 问题。
C++ std::wofstream unicode issue.
我使用 VS 2012 编写了这段代码:
std::wofstream logout("my_log.txt", std::ios_base::out | std::ios_base::trunc);
std::locale utf8_locale(locale(), new codecvt_utf8<wchar_t>);
logout.imbue(utf8_locale);
if (!logout.is_open())
{
printf("Cannot open file.\n");
return 1;
}
else printf("Log file created.\n");
logout << "Client IP │"<< "Recv time │"<< "Request │"<< "Response "<<endl;
logout << "─────────────────────┼"<< "─────────────────────────┼"<<endl;
在 my_log.txt 文件中,所有 unicode 符号都替换为“??????”。我想创建类似日志文件的东西 table。如果我使用像“---”这样的标准 ASCII 符号,它会起作用,并且它们都显示在屏幕上。
我试过更改全局语言环境,但我没有成功。
这就是为什么我们在字符串文字中只使用 ASCII。
您的代码很好,但您的字符串文字显然不包含您认为的内容。这可能是由于文本编辑器配置错误或功能不足所致。
改用转义序列 (\uXXXX
),这样您就知道得到了什么。在 2015 年,由 ASCII 字符组成的源代码绝对不会出错。
哦,这其实很好笑。
wchar_t *s1 = L"\u2502"; // "│"
wchar_t *s2 = L"\u2500"; // "─"
wchar_t *s3 = L"\u253C"; // "┼"
logout << s1<<s2<<s3<<endl;
现在在我的 .txt 文件中我看到了 unicode 数字。但是我可以在没有 (\uXXXX
)
的情况下使用相同的结构
logout << L" │ ─ ┼"<<endl;
这也有效。
我使用 VS 2012 编写了这段代码:
std::wofstream logout("my_log.txt", std::ios_base::out | std::ios_base::trunc);
std::locale utf8_locale(locale(), new codecvt_utf8<wchar_t>);
logout.imbue(utf8_locale);
if (!logout.is_open())
{
printf("Cannot open file.\n");
return 1;
}
else printf("Log file created.\n");
logout << "Client IP │"<< "Recv time │"<< "Request │"<< "Response "<<endl;
logout << "─────────────────────┼"<< "─────────────────────────┼"<<endl;
在 my_log.txt 文件中,所有 unicode 符号都替换为“??????”。我想创建类似日志文件的东西 table。如果我使用像“---”这样的标准 ASCII 符号,它会起作用,并且它们都显示在屏幕上。 我试过更改全局语言环境,但我没有成功。
这就是为什么我们在字符串文字中只使用 ASCII。
您的代码很好,但您的字符串文字显然不包含您认为的内容。这可能是由于文本编辑器配置错误或功能不足所致。
改用转义序列 (\uXXXX
),这样您就知道得到了什么。在 2015 年,由 ASCII 字符组成的源代码绝对不会出错。
哦,这其实很好笑。
wchar_t *s1 = L"\u2502"; // "│"
wchar_t *s2 = L"\u2500"; // "─"
wchar_t *s3 = L"\u253C"; // "┼"
logout << s1<<s2<<s3<<endl;
现在在我的 .txt 文件中我看到了 unicode 数字。但是我可以在没有 (\uXXXX
)
logout << L" │ ─ ┼"<<endl;
这也有效。