2016-09-21 34 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'中的空字符串替換爲空字符串。 –