2009-09-14 8 views

Respuesta

9

Para UTF8, usted tiene que generar la codificación por sí mismo utilizando reglas que se encuentran, por ejemplo, here. Por ejemplo, el afilado alemán s (ß, punto de código 0xdf) tiene la codificación UTF8 0xc3,0x9f. Su e-acute (é, código point 0xe9) tiene una codificación UTF8 de 0xc3, 0xa9.

Y usted puede poner caracteres hexadecimales arbitrarios en sus cadenas con:

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

La notación \ xHEX es lo que estaba buscando, gracias. –

+0

Si la variable es lo suficientemente amplia como para contener UTF-16, ¿puede decir que \ x00e9? –

1
+0

Hemos de tener en cuenta que eso es un * UNIX * spec (SUS), que no forma parte de la norma ISO C. Sólo llevarlo hasta ya que no había una etiqueta de Unix en la pregunta. – paxdiablo

+0

Estoy más interesado en cómo representar é en texto ASCII en C, en Perl puedo hacerlo diciendo '" \ x {e9} "'. El problema es que la fuente está en ASCII, pero necesita crear caracteres UTF-8. –

+0

@Chas: ¿Por qué no usar un UTF-8 como la codificación del archivo de origen? La mayoría de los compiladores no deberían tener ningún problema con eso, siempre y cuando las secuencias de multibyte solo se encuentren dentro de los literales de cadena ... – Christoph

5

Si usted tiene un compilador C99 puede utilizar <wchar.h> (y <locale.h>) e introduzca el código Unicode señala directamente en la fuente.

$ 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

Si bien el código anterior funciona, es fundamental mencionar que 'wchar_t' no necesariamente puede representar varias configuraciones regionales a la vez. Solo debe ser lo suficientemente amplio para admitir la configuración regional actual. –

Cuestiones relacionadas