2009-02-09 2 views
1

utf-8로 인코딩 된 문자열을 파일에 기록하는 데 관심이 있습니다.Linux 및 C- 프로그래밍 : utf-8로 인코딩 된 텍스트를 파일에 쓰려면 어떻게해야합니까?

저수준 함수 open() 및 write()를 사용하여이 작업을 수행했습니다. 처음에는 로케일을 setlocale("LC_ALL", "de_DE.utf8")으로 설정된 utf-8 인식 문자 세트로 설정했습니다. 그러나 결과 파일에는 utf-8 문자가 포함되어 있지 않으며 iso8859 인코딩 된 움라우트 만 포함됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

부록 : 내 문자열이 실제로 utf-8로 인코딩 된 것인지 모르겠다. 난 그냥이 형태의 소스 파일에 보관 : char *msg = "Rote Grütze";

페이지의 스크린 샷을 TEXTFILE의 콘텐츠를 : alt text http://img19.imageshack.us/img19/9791/picture1jh9.png

+0

Appendum2 : 필자가 쓴 것처럼 나는 움라우트를 다음 텍스트에 포함시켰다 : 'char * msg = "Rote Grütze"' – prinzdezibel

+1

단어는 "appendum"이 아닌 "addendum"이다. 지적을위한 –

+0

thx. – prinzdezibel

답변

2

로캘을 변경해도 write()를 사용하여 파일에 기록 된 실제 데이터는 변경되지 않습니다. 실제로 UTF-8 문자로 생성해야 파일에 쓸 수 있습니다. 이를 위해 라이브러리를 ICU으로 사용할 수 있습니다.

질문 편집 후 편집 : UTF-8 문자는 "특수 기호"(ûmlauts, çccénts 등)의 ISO-8859와 만 다릅니다. 따라서이 기호가없는 모든 텍스트의 경우 둘 다 같습니다. 그러나 이러한 기호로 프로그램 문자열에 포함 시키면 텍스트 편집기가 데이터를 UTF-8로 처리해야합니다. 때때로 당신은 그것을 말해야 만합니다.

요약하면 소스 코드 내의 문자열이 UTF-8 인 경우 작성한 텍스트는 UTF-8이됩니다.

또 다른 편집 :

iconv -f latin1 -t utf8 file.c 

이 UTF8로 모든 라틴어 1 문자열을 변환 할 때, 그리고 : 그냥 확실하게, 당신의 iconv 사용하여 UTF-8로 소스 코드을 변환 할 수 있습니다 UTF-8로 인쇄하게됩니다. iconv에 이상한 문자가 있거나 이상한 문자가있는 출력 문자열이 표시되면 문자열이 이미 UTF-8에있는 것입니다.

감사합니다.

+0

으로했는데 다른 라이브러리를 사용하지 않고 libc에서 어떻게 할 수 있습니까? – prinzdezibel

+0

음, 물론입니다. 내가 말했듯이, UTF-8을 지원하는 편집기를 사용하십시오. –

+0

diegosevilla : 나는 소스 코드에 움라우트를 가지고 있으며, iso-8859로 암호화되어 있습니다. icu 라이브러리없이 utf-8로 프로그램을 작성하도록하려면 어떻게해야합니까? – prinzdezibel

0

당신은 16 진수 편집기에서 파일을 열고 확인할 수 있습니다, 간단한 입력 예와, 기입해진 바이트가 write()에 건네 준 Unicode 문자의 값이 아닌 것을 나타냅니다. 때로는 텍스트 편집기가 문자 집합을 결정할 방법이 없으며 텍스트 편집기가 ISO8859-1 문자 집합을 가정했을 수 있습니다.

이 작업을 완료하면 원본 게시물을 편집하여 관련 정보를 추가 할 수 있습니까?

+0

예, hexdump -C – prinzdezibel

1

예, glibc로 할 수 있습니다. 둘 이상의 인코딩 유형을 처리 할 수 ​​있기 때문에 UTF-8 대신 멀티 바이트라고 부릅니다. 설명서의 this을 확인하십시오.

접두어 mb로 시작하고 wc 접두어로 작동하여 멀티 바이트에서 와이드 문자로 변환하는 함수를 찾습니다. setlocale()을 사용하여 UTF-8 로케일을 먼저 설정해야 멀티 바이트 지원 구현을 선택할 수 있습니다.

유니 코드 파일에서오고 있다면 찾고있는 기능이 wcstombs()라고 생각합니다.

관련 문제