2008-10-27 5 views
7

유니 코드 코드 포인트를 C에서 UTF-8 바이트 시퀀스로 변환하는 가장 간단한 방법은 무엇입니까? 염두에 두어야 할 유일한 방법은 iconv을 사용하여 UTF-32LE 코드 페이지를 UTF-8로 매핑하는 것입니다.하지만 과도한 것 같습니다.유니 코드 코드 포인트를 UTF-8로 변환하는 가장 간단한 방법

+0

어쨌든 iconv로 끝났습니다. 잔인한 것처럼 보일 수도 있지만 외부 종속성을 도입하지 않는 유일한 실제 솔루션처럼 보입니다. –

+0

그래서 @ JesperE의 대답을 수락하고 그것을 upvote. – tvanfosson

+5

제품에있는 버그가 수정되거나 더 나은 도구가 도입되었을 때 "더 이상 적합하지 않습니다"라고 생각했습니다. 질문자가 더 이상 대답에 관심이 없을 때가 아닙니다 ... –

답변

7

유니 코드 변환은 간단한 작업이 아닙니다. iconv를 사용하는 것은 나에게 과도한 것처럼 보이지 않습니다. 아마도 systemv() 호출을 피하기 위해 사용할 수있는 iconv의 라이브러리 버전이 있습니다.

+0

나는 이미 라이브러리를 사용할 계획이었습니다. –

+1

이 방향에서는 매우 간단한 작업입니다. 라이브러리가 필요하지 않습니다. 또한'iconv'는 POSIX의 C 인터페이스와 유틸리티 프로그램을 모두 가리 킵니다. 나는 OP가 C 인터페이스에 대해 이야기하고 있다고 의심한다.이 인터페이스는 매우 좋은 옵션이지만, 직접 작성하는 것도 어렵지 않다. 엉망진창이 쉬운 다른 방향 (UTF-8에서 코드 포인트까지)입니다. –

3

UTF8은 인코딩 된 코드 포인트의 길이를 인코딩 된 바이트의 최상위 비트로 코딩하여 작동합니다. http://en.wikipedia.org/wiki/UTF-8#Description

C에서이 작은 기능을 발견 한 여기에서 http://www.deanlee.cn/programming/convert-unicode-to-utf8/은 테스트하지 않았습니다.

+0

이 코드는 0x10000 이하의 코드 포인트 만 처리합니다 (Windows의 wchar_t는 실제로 UTF-16이므로). –

+1

백 방식의 코드에 링크 : http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff

5

아마도 ICU을 제안할까요? i18n 문제를 적절하게 처리하는 "업계 표준"방식입니다.

저는 C 버전을 직접 사용하지 않았지만 ucnv_fromUnicode은 이후의 기능 일 수 있습니다.

+0

나는 갈 수 없습니다. 이 작업을 위해 새로운 시스템이 아닌 라이브러리 세트에 대한 의존성을 소개합니다. 그래도 제안을 주셔서 감사합니다. –