代码之家  ›  专栏  ›  技术社区  ›  Chas. Owens

当字符集是ASCII时,如何在文本字符串iso/ansi c c中表示Unicode字符?

  •  5
  • Chas. Owens  · 技术社区  · 16 年前

    在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 回复  |  直到 15 年前
        1
  •  10
  •   paxdiablo    16 年前

    对于utf8,您必须使用找到的规则自己生成编码,例如, here . 例如,德国夏普S(_,代码点0Xdf)使用的是UTF8编码0xc3,0x9f。您的E-Acute(_),代码点0Xe9使用的是UTF8编码0xc3,0Xa9。

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

    char *cv = "r\xc3\xa9sum\xc3\xa9";
    char *sharpS = "\xc3\x9f";
    
        2
  •  6
  •   pmg    16 年前

    如果您有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é
    
        3
  •  1
  •   Jeff Ober    16 年前