2012-12-18 5 views
3

C 문자 배열의 문자 저장과 관련하여 질문이 있습니다.128 문자 이상의 C 문자

파일의 텍스트를 "char"유형의 배열로 읽어야합니다 (부호없는 char을 사용할 수 없음). 127보다 큰 값을 가진 특정 문자 (예 : €, ä, ö, ...)는 음수 값으로 저장되지만 더 많은 공간을 차지합니다 (예 : €는 3 개의 음수 값을가집니다).

어떻게 이러한 음수 값을 부호없는 문자로 다시 계산할 수 있습니까? 어떤 사람이 나에게 그 문제에 대한 가이드 또는 가이드를 연결시킬 수 있습니까?

+4

''€ ''와 같은 단일 문자가''char'을 3 개 사용하면 [UTF-8] (http://en.wikipedia.org/wiki/UTF-8) 인코딩 파일을 읽었을 가능성이 큽니다. –

답변

-1
char x = 128; 

unsigned char y = (unsigned char) x; 

printf("%c %u\n", x, y); 
1

이 사용 인코딩에 따라 달라집니다.

기존의 1 바이트 인코딩으로 문제가 발생하지 않습니다. 예, 일부 문자는 음수 값으로 처리되지만 읽는 동안 그대로 유지됩니다. 당신이 그들을 다시 쓰는다면, 그들은 그들이 있었던 것입니다.

유로 기호 당 3이 char이라고 확신하기 때문에 UTF-8과 같은 일부 유니 코드 인코딩이 사용됩니다.

즉, wchar_t과 같은 일부 멀티 바이트 유형으로 저장해야합니다. 그러나 이것은 데이터 저장에 대한 귀하의 요구와 상충됩니다 char.

먼저 파일을 1 바이트 인코딩으로 변환하는 것이 좋습니다 (예 : Win1252). 이 인코딩에는 유로 기호 1 바이트가 있습니다.

유니 코드를 사용하려면 음수 인 char을 처리하기가 어렵습니다. 양의 정수로 유니 코드 값을 표현하는 것이 일반적입니다.