如何获取并打印wchar_t的第n个字符?

时间:2015-03-07 03:54:16

标签: c windows unicode

下式给出:

wchar_t* str = L"wide chars";

如何在c(不是c ++)中一次提取一个字符?

例如,我试过

for (int i = 0; i < wcslen(str); i++) {
    printf("%wc\n", str[i]);
}

但只给了我胡言乱语

1 个答案:

答案 0 :(得分:1)

在Linux(Ubuntu)上,以下工作正常:

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

int main() {
  /* See below */
  setlocale(LC_ALL, "");
  wchar_t* str = L"日本語";
  for (int i = 0; i < wcslen(str); i++) {
        printf("U+%04x: %lc\n", str[i], str[i]);
  }
  return 0;
}

setlocale电话很重要。没有它,程序将在C语言环境中执行,其中没有宽字符到多字节转换,这对于%lc格式代码是必需的。 setlocale(LC_ALL, "");导致进程的语言环境设置为各种环境变量定义的默认值。