Unicode代码指向utf8和wctomb

时间:2016-09-21 11:01:52

标签: c linux unicode utf-8

我一直在寻找将unicode代码点转换为utf8的方法。 到目前为止,我已经了解到我可以手动完成或使用iconv。

我还认为wctomb会起作用,但它不会:

#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

#define CENTER_UTF8 "\xf0\x9d\x8c\x86"
#define CENTER_UNICODE 0x1D306

int main(int argc, char** argv)
{
    puts(CENTER_UTF8); //OK
    static char buf[10];
    int r;

#define WCTOMB(What) \
    wctomb(NULL,0); \
    r=wctomb(buf,What); \
    puts(buf); \
    printf("r=%d\n", r);

    //Either one fails with -1
    WCTOMB(CENTER_UNICODE);
    WCTOMB(htonl(CENTER_UNICODE));
}

有人可以向我解释为什么wctomb不会将unicode代码点转换为utf8。我在Linux上使用utf8语言环境。

1 个答案:

答案 0 :(得分:1)

在使用wctomb()

之前,您应该正确更改程序区域设置
#include <locale.h>
/* ... */
setlocale(LC_ALL, "");

根据您的环境设置程序区域设置。 man setlocale

  

如果locale是一个空字符串,“”,应该是语言环境的每个部分   被修改是根据环境变量设置的。

P.S。实际上LC_CTYPE就足够了wctomb()