2009-09-14 22 views

回答

9

對於UTF8,你必須產生自己使用發現規則的編碼,例如,here。例如,德語尖銳的s(ß,代碼點0xdf)具有UTF8編碼0xc3,0x9f。您的e-acute(é,代碼點0xe9)具有0xc3,0xa9的UTF8編碼。

你可以把任意的十六進制字符在你的字符串與:

char *cv = "r\xc3\xa9sum\xc3\xa9"; 
char *sharpS = "\xc3\x9f"; 
+0

\ xHEX符號是我一直在尋找的,謝謝。 – 2009-09-14 15:01:03

+0

如果變量足夠寬以容納UTF-16,可以說\ x00e9? – 2009-09-14 15:02:18

1

wchar_t的是你正在尋找的類型:http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html

+0

只要記住,這是一個* UNIX *規範(SUS),沒有ISO C的一部分。我只是把它因爲這個問題上沒有unix標籤。 – paxdiablo 2009-09-14 14:32:22

+0

我更感興趣的是如何在C中使用ASCII文本渲染é,在Perl中,我可以通過說'\ x {e9}「來實現。問題在於源代碼是ASCII,但它需要創建UTF-8字符。 – 2009-09-14 14:59:48

+0

@Chas:爲什麼不使用UTF-8作爲源文件編碼?只要多字節序列只出現在字符串文字內部,大多數編譯器都不應該有任何問題... – Christoph 2009-09-14 15:56:06

5

如果你有C99編譯器,你可以使用<wchar.h>(和< locale.h文件>),並輸入Unicode碼直接指向源代碼。

$ cat wc.c

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

int main(void) { 
    const wchar_t *name = L"r\u00e9sum\u00e9"; 
    setlocale(LC_CTYPE, "en_US.UTF-8"); 
    wprintf(L"name is %ls\n", name); 
    return 0; 
} 

$ /usr/bin/gcc -std=c99 -pedantic -Wall wc.c

$ ./a.out

name is résumé 
+0

儘管上面的代碼確實起作用,但要提到'wchar_t'不一定能夠一次表示多個語言環境是非常重要的。它只需足夠寬以支持當前的語言環境。 – 2015-10-28 21:21:01