C ++ std :: wofstream unicode问题。

时间:2015-09-12 14:17:54

标签: c++ unicode wofstream

我使用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符号都替换为&#34; ?????&#34;。我想创建类似日志文件表的东西。如果我使用标准的ASCII符号,例如&#34; ---&#34;它将起作用,并且它们都被正确显示。 我试图改变全局语言环境,但我没有成功。

2 个答案:

答案 0 :(得分:0)

这就是我们在字符串文字中不使用ASCII的原因。

您的代码很好,但您的字符串文字显然不包含您认为他们所做的事情。这可能是由于配置错误或文本编辑不足。

改为使用转义序列(\uXXXX),以便了解您所获得的内容。在2015年,由ASCII字符组成的源代码确实出错了。

答案 1 :(得分:0)

哦,这真的很有趣。

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;

这也有效。