在Perl中,我可以說當字符集是ASCII時,如何在文字字符串ISO/ANSI C中表示Unicode字符?
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 */
}
在Perl中,我可以說當字符集是ASCII時,如何在文字字符串ISO/ANSI C中表示Unicode字符?
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,你必須產生自己使用發現規則的編碼,例如,here。例如,德語尖銳的s(ß,代碼點0xdf)具有UTF8編碼0xc3,0x9f。您的e-acute(é,代碼點0xe9)具有0xc3,0xa9的UTF8編碼。
你可以把任意的十六進制字符在你的字符串與:
char *cv = "r\xc3\xa9sum\xc3\xa9";
char *sharpS = "\xc3\x9f";
wchar_t的是你正在尋找的類型:http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html
如果你有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é
儘管上面的代碼確實起作用,但要提到'wchar_t'不一定能夠一次表示多個語言環境是非常重要的。它只需足夠寬以支持當前的語言環境。 – 2015-10-28 21:21:01
\ xHEX符號是我一直在尋找的,謝謝。 – 2009-09-14 15:01:03
如果變量足夠寬以容納UTF-16,可以說\ x00e9? – 2009-09-14 15:02:18