【问题标题】:How to output multiple byte characters normally in c/c++ console application?如何在 c/c++ 控制台应用程序中正常输出多字节字符?
【发布时间】:2011-04-21 03:10:31
【问题描述】:
printf("%s\n", multibytestring);

默认情况下,多字节字符会在控制台中显示为???,我该如何解决?

【问题讨论】:

  • 什么类型的多字节字符?宽字符 (wchar_t)?
  • 什么平台?视窗? Linux?在控制台上的国际字符支持方面,它们的工作方式完全不同。

标签: c++ console-application multibyte


【解决方案1】:

试试这个:

wprintf("%s\n", multibytestring);

【讨论】:

    【解决方案2】:

    对于宽字符串,您需要“%ls”。这就是你所追求的吗?

    这里有一个更完整的答案:

    • 您可以使用 wprintf 默认使用 "%s" 输出 16 位字符串
    • 您可以使用“%ls”或“%hs”为单个参数显式指定字符/字符串宽度,无论 printf 变体如何
    • 请参阅:http://msdn.microsoft.com/en-us/library/56e442dc.aspx 以获取 MS 的参考文档

    如果您询问 UTF8 字符显示不正确,这可能是特定于平台的(取决于控制台的代码页/处理)。您应该能够将 UTF8 输出为 ASCII,但显示器必须能够正确处理 UTF8,并且您可能需要设置适当的代码页或其他环境设置(对此不太确定,我认为它是特定于应用程序/平台的)。

    【讨论】:

      【解决方案3】:

      我猜是 Windows,你的意思是多字节字符而不是宽字符。

      确保定义了_MBCS。尝试拨打setlocale,然后拨打_setmbcp

      setlocale(LC_ALL, "japanese");
      _setmbcp(_MB_CP_LOCALE);
      

      之后它应该可以正常工作了。

      【讨论】:

      • 看来_setmbcp 是没有必要的。
      • 顺便说一句,有没有一个单一的语言环境可以用来显示全世界的所有字符?
      • @Alan:那将是 Unicode。不幸的是,Windows 不支持 UTF-8 语言环境。
      • @Roman A. Taycher:Windows 确实支持 UTF-16,但仅支持wchar_t/宽字符串的形式。
      猜你喜欢
      • 2013-04-20
      • 1970-01-01
      • 2013-11-21
      • 2021-07-05
      • 2017-05-28
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多