【问题标题】:C Wide characters - how to use them?C 宽字符 - 如何使用它们?
【发布时间】:2011-08-30 10:02:25
【问题描述】:

我可以使用此代码输出单个字符:

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

main(){

setlocale(LC_CTYPE, "");
wchar_t a = L'Ö';
putwchar(a);

}

如何调整代码以输出字符串?

类似

wchar_t *a = L"ÖÜÄöüä";
wprinf("%ls", a);

【问题讨论】:

  • wprintf(L"%ls", a) 有什么问题?它不适合你吗?
  • Ehmm.. 谢谢你刚刚回答了我的问题。我的代码中缺少 L。
  • 也就是说,wchar 的用处不大。它仅适用于 16 位 Unicode,并且不那么便携。 UTF-8(结合用于国际化繁重工作的库,例如 iconv 或 ICU)几乎总是更好的选择。
  • wchar_t 在大多数类 Unix 系统上是 32 位,但在 Windows 上是 16 位。
  • 你会接受其中一个答案,还是还有什么不清楚的地方?

标签: c character wchar-t


【解决方案1】:
wprintf(L"%ls", str)

【讨论】:

    【解决方案2】:

    这有点棘手,你必须知道你内部的wchar_ts 是什么意思。 (See here 进行一些讨论。)基本上,您应该通过 mbstowcs/wcstombs 与环境进行通信,并通过 iconv 与具有已知编码的数据进行通信(从 WCHAR_T 转换为 WCHAR_T)。

    (这里的例外是 Windows,您无法真正与环境进行有意义的通信,但您可以直接使用 Windows API 函数在宽版本中访问它,并且可以将宽字符串直接写入消息框等。)

    也就是说,一旦您有了内部宽字符串,您可以使用wcstombs 将其转换为环境的多字节字符串,或者您可以只使用为您执行转换的printf("%ls", mywstr);。只是不要忘记在程序开始时调用setlocale(LC_CTYPE, "")

    【讨论】:

      猜你喜欢
      • 2016-12-18
      • 1970-01-01
      • 2011-10-08
      • 2015-03-13
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多