2009-09-14 4 views

답변

9

, 당신은 자신이 발견 규칙을 사용하여 인코딩을 생성 할 수 있고, 예 : here. 예를 들어, 독일 샤프 (ß, 코드 포인트 0xdf)는 UTF8 인코딩 0xc3,0x9f를가집니다. 전자 급성 (É, 코드 포인트 0xe9)은 0xc3,0xa9의 UTF8 인코딩을가집니다.

그리고 당신은 당신의 문자열에서 임의의 진수 문자를 넣을 수 있습니다 : 당신은 당신이 사용할 수있는 C99 컴파일러가있는 경우

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

\ xHEX 표기법은 내가 찾던 고맙습니다. 감사합니다. –

+0

변수가 UTF-16을 수용 할만큼 충분히 넓은 경우 \ x00e9라고 할 수 있습니까? –

1

wchar_t를 당신이 찾고있는 유형입니다 말하고 싶은 : UTF8의 경우 http://opengroup.org/onlinepubs/007908799/xsh/wchar.h.html

+0

$ /usr/bin/gcc -std=c99 -pedantic -Wall wc.c

그 질문에 unix 태그가 없었기 때문입니다. – paxdiablo

+0

C에서 ASCII 텍스트로 é를 렌더링하는 방법에 더 관심이 있습니다. Perl에서는' "\ x {e9}"'라고 말하면됩니다. 문제는 소스가 ASCII이지만 UTF-8 문자를 만들어야한다는 것입니다. –

+0

@Chas : 왜 UTF-8을 소스 파일 인코딩으로 사용하지 않습니까? 대부분의 컴파일러는 멀티 바이트 시퀀스가 ​​문자열 리터럴 내에서만 발생하는 한 그 어떤 문제도 있어서는 안됩니다 ... – Christoph

5

<wchar.h> (및 <locale.h>)와 유니 코드를 입력 소스에서 직접 가리킨다. 그냥 그이 * UNIX * 사양 (SUS), 난 단지 그것을 가져 ISO C.의 일부입니다 것을 명심

$ 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; 
} 

$ ./a.out

name is résumé 
+0

위의 코드가 작동하는 동안,'wchar_t'가 반드시 여러 로케일을 동시에 표현할 수있는 것은 아닙니다. 현재 로케일을 지원할 수있을만큼 넓어 야합니다. –

관련 문제