1 wprintf将“Ω”显示为3A9(UTF16)确实很奇怪,但是wctomb转换
wchar到CEA9(UTF8),我的语言环境是默认的en_US.utf8。正如手册页所述,
它们应该符合我的语言环境,但是wpritnf使用UTF16,为什么?

摘自http://www.fileformat.info/info/unicode/char/3a9/index.htm

UTF中的Ω

UTF-8(十六进制)0xCE 0xA9(cea9)

UTF-16(十六进制)0x03A9(03a9)

2 wprintf和printf不能在同一程序中运行,我有
选择使用wprintf还是printf,为什么?

看我的程序:

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

int main() {
  setlocale(LC_ALL,""); // inherit locale setting from environment
  int r;
  char wc_char[4] = {0,0,0,0};
  wchar_t myChar1 = L'Ω'; //greek

  // should comment out either wprintf or printf, they don't run together
  r = wprintf(L"char is %lc (%x)\n", myChar1, myChar1);//On Linux, to UTF16

  r = wctomb(wc_char, myChar1); // On Linux, to UTF8
  r = printf("r:%d, %x, %x, %x, %x\n", r, wc_char[0], wc_char[1], wc_char[2], wc_char[3]);
}

最佳答案

第二个问题的答案与stream orientation有关。您不能混合使用printf()wprintf(),因为它们需要不同的方向。

该过程开始时,尚未设置流。在第一次调用使用该流的函数时,将对其进行相应的设置。 printf()将方向设置为正常,wprintf()将方向设置为宽。

调用需要与当前设置不同方向的函数是不确定的行为。

09-08 02:53