gpt4 book ai didi

c - Linux 上的 wprintf UTF16(应该是 UTF8)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:22 24 4
gpt4 key购买 nike

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() 会将其设置为宽。

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

关于c - Linux 上的 wprintf UTF16(应该是 UTF8)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7700684/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com