当字符集为ASCII时,如何在文字字符串ISO / ANSI C中表示Unicode字符?

时间:2009-09-14 14:12:51

标签: c unicode

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

4 个答案:

答案 0 :(得分:10)

对于UTF8,您必须使用找到的规则自行生成编码,例如here。例如,德语sharp s(ß,代码点0xdf)具有UTF8编码0xc3,0x9f。您的e-acute(é,代码点0xe9)的UTF8编码为0xc3,0xa9。

您可以在字符串中添加任意十六进制字符:

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

答案 1 :(得分:6)

如果您有C99编译器,可以使用&lt; wchar.h&gt; (和&lt; locale.h&gt;)并直接在源代码中输入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é

答案 2 :(得分:1)

答案 3 :(得分:0)

wchar_t setlocale() 似乎可选

#include <stdio.h>

int main(void) {
  const char *const name = "r\u00e9sum\u00e9";
  printf("name is %s\n",name);
  return 0;
}
$ echo $LANG
en_US.UTF-8
$ /usr/bin/gcc -std=c99 -pedantic -Wall -Wextra bc.c
$ ./a.out
name is résumé