【问题标题】:xcode std::wcout with wchar_t or std::wstring!xcode std::wcout 与 wchar_t 或 std::wstring !
【发布时间】:2010-10-14 17:22:59
【问题描述】:

我正在尝试将 xcode 中的 wstring/wchar_t 打印到控制台,但不幸的是它仅适用于基本字符(我认为是 ascii)字符,其他所有内容都以数字显示,例如:

std::cout << "äöüu"<< std::endl;
std::wcout << L"äöüu" << std::endl;

当 cout 版本按预期打印“äöüu”时,我在使用 wchar_t 时得到以下信息:

\344\366\374u

关于如何解决这个问题的任何想法?我正在使用 xcode 3.2.2 64 位和 gcc 4.2,文件编码设置为 Unicode (UTF-8)

谢谢!

【问题讨论】:

  • 可能是预期的行为,因为终端编码通常是 UTF-8 而std::wcout 处理 UTF-32。但请注意,如果您使用 clang++(在 LLVM 2.8 中可用,但尚未随 Xcode 分发)进行编译,则两次都会输出正确的文本。
  • 将输出重定向到文件或仅在终端上时会发生这种情况吗?

标签: c++ xcode string character-encoding


【解决方案1】:

我遇到了一个奇怪的问题,但使用 wostream/wofstream。谷歌了一下,这是分析器:

tc_ofstream ofs;

if (sizeof(TCHAR) == sizeof(wchar_t))
{
    //codecvt_utf16<TCHAR> utf16; cannot make use of non-dynamic value
    locale   loc ( locale::classic() ,new codecvt_utf16<TCHAR> );
    ofs.imbue( loc );
    ofs.open( _T(".\\test.txt") ,tc_ios::binary );

    TCHAR BOM = 0xFEFF;    ofs << BOM;
    ofs << _T("UNICODE") << endl;
}
else
{
    ofs.open( _T(".\\test.txt") ,tc_ios::binary );
    ofs << _T("NON-UNICODE") << endl;
}

【讨论】:

  • tc_ofstream 是 wofstream 或 ofstream 的 typedef(取决于 UNICODE
【解决方案2】:

如果您使用 wxWidgets,wxString 会使用 wxConvCurrent 自动为您处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多