Как представить символ Unicode в литеральной строке ISO / ANSI C, когда набор символов – ASCII?

В Perl я могу сказать

my $s = "r\x{e9}sum\x{e9}"; 

для присвоения "résumé" $s . Я хочу сделать что-то подобное в C. В частности, я хочу сказать

 sometype_that_can_hold_utf8 c = get_utf8_char(); if (c < '\x{e9}') { /* do something */ } 

Для UTF8 вы должны сами генерировать кодировку, используя, например, правила, найденные здесь . Например, немецкий острый s (ß, кодовая точка 0xdf) имеет кодировку UTF8 0xc3,0x9f. Ваш e-sharp (é, кодовая точка 0xe9) имеет кодировку UTF8 0xc3,0xa9.

И вы можете поместить произвольные шестнадцатеричные символы в свои строки:

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

Если у вас есть компилятор C99, вы можете использовать ) и вводить коды кода Unicode непосредственно в источнике.

$ cat wc.c

 #include  #include  #include  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é 

wchar_t – это тип, который вы ищете: http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html