2016-09-21 129 views
2

我正在寻找方法将unicode代码转换为utf8。 到目前为止,我已经学会了我可以手动或使用iconv。Unicode代码指向utf8和wctomb

我还以为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码点转换为UTF-8。我在Linux上使用utf8语言环境。

回答

1

你应该改变程序语言环境中使用的wctomb()之前正确:

#include <locale.h> 
/* ... */ 
setlocale(LC_ALL, ""); 

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

如果区域设置为空字符串,“”,应该被 根据所述环境变量设定修改的区域的每个部分。

P.S.其实LC_CTYPE就足够了。

+1

只要程序在UTF-8语言环境中运行,就可以工作,否则您需要用调用的UTF-8语言环境的名称将'setlocale'中的空字符串替换为空字符串。 –