我很难理解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;
,结果只有两个不可打印的字符(��
)。
答案 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);