2009-09-14 3 views

Antwort

9

Für UTF8, müssen Sie die Codierung selbst generieren Regeln gefunden verwenden, zum Beispiel here. Zum Beispiel hat das deutsche scharfe s (ß, Codepunkt 0xdf) die UTF8-Kodierung 0xc3,0x9f. Ihr e-Akut (é, Codepunkt 0xe9) hat eine UTF8-Codierung von 0xc3,0xa9.

Und Sie können in die Saiten mit beliebigen Hex-Zeichen setzen:

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

Die \ xHEX-Notation ist, was ich gesucht habe, danke. –

+0

Wenn die Variable breit genug ist, um UTF-16 zu enthalten, können Sie \ x00e9 sagen? –

1
+0

Nur daran denken, dass das ist ein * UNIX * spec (SUS), die nicht Teil von ISO C. Ich kann es nur bringen da es auf der Frage kein Unix-Tag gab. – paxdiablo

+0

Ich interessiere mich mehr für das Rendern von é in ASCII-Text in C, In Perl kann ich es tun, indem ich '" \ x {e9} "' sage. Das Problem besteht darin, dass die Quelle in ASCII ist, aber UTF-8-Zeichen erstellen muss. –

+0

@Chas: Warum nicht ein UTF-8 als Codierung der Quelldatei verwenden? Die meisten Compiler sollten damit kein Problem haben, solange die Multibyte-Sequenzen nur in String-Literalen vorkommen ... – Christoph

5

Wenn Sie einen C99-Compiler können Sie < verwenden wchar.h > (und <locale.h>) und geben Sie den Unicode-Code Punkte direkt in der Quelle.

$ 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é 
+0

Während der obige Code funktioniert, ist es wichtig zu erwähnen, dass "wchar_t" nicht unbedingt mehrere Locales gleichzeitig repräsentieren kann. Es muss nur breit genug sein, um das aktuelle Gebietsschema zu unterstützen. –

Verwandte Themen