Как мне представить символ Unicode в литеральной строке ISO / ANSI C, когда набор символов ASCII? - PullRequest
5 голосов
/ 14 сентября 2009

В 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 */
}

Ответы [ 3 ]

10 голосов
/ 14 сентября 2009

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

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

char *cv = "r\xc3\xa9sum\xc3\xa9";
char *sharpS = "\xc3\x9f";
6 голосов
/ 14 сентября 2009

Если у вас есть компилятор C99, вы можете использовать (и ) и вводить кодовые точки 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é
1 голос
/ 14 сентября 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...