如何使用write()来使用wchar_t打印unicode

时间:2017-12-08 23:48:06

标签: c unicode

我很难理解write()以便打印unicode caracters,UTF-8中的unicode使用3个字节,所以使用3个字符的数组打印没有问题它们打印出字符'Ƹ'

#include <locale.h>
#include <unistd.h>

int     main(void)
{
    setlocale(LC_ALL, "en_US.UTF-8");
    char uni[3] = {0x00, 0xC6, 0xB8};
    write(1, uni, 3);
    return (0);
}

问题是:如果wchar_t也是3个字节长,而write只打印参数给出的字节数,为什么以下代码不起作用?

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

int     main(void)
{
    setlocale(LC_ALL, "en_US.UTF-8");
    wchar_t uni = L'\xC6B8';
    write(1, &uni, sizeof(wchar_t));
    return (0);
}

我已尝试初始化wchar_t,如下所示:wchar_t uni = 0xC6B8;,结果只有两个不可打印的字符(��)。

1 个答案:

答案 0 :(得分:0)

setlocale(LC_ALL, "en_US.UTF-8");
char uni[3] = {0x00, 0xC6, 0xB8};
write(1, uni, 3);

代替上面的代码,请使用下面的代码

setlocale(LC_ALL, "en_US.UTF-8");
write(1, "Ƹ", 3);

Understanding and writing wchar_t in C