유니 코드 코드 포인트를 C에서 UTF-8 바이트 시퀀스로 변환하는 가장 간단한 방법은 무엇입니까? 염두에 두어야 할 유일한 방법은 iconv
을 사용하여 UTF-32LE 코드 페이지를 UTF-8로 매핑하는 것입니다.하지만 과도한 것 같습니다.유니 코드 코드 포인트를 UTF-8로 변환하는 가장 간단한 방법
답변
유니 코드 변환은 간단한 작업이 아닙니다. iconv를 사용하는 것은 나에게 과도한 것처럼 보이지 않습니다. 아마도 systemv() 호출을 피하기 위해 사용할 수있는 iconv의 라이브러리 버전이 있습니다.
나는 이미 라이브러리를 사용할 계획이었습니다. –
이 방향에서는 매우 간단한 작업입니다. 라이브러리가 필요하지 않습니다. 또한'iconv'는 POSIX의 C 인터페이스와 유틸리티 프로그램을 모두 가리 킵니다. 나는 OP가 C 인터페이스에 대해 이야기하고 있다고 의심한다.이 인터페이스는 매우 좋은 옵션이지만, 직접 작성하는 것도 어렵지 않다. 엉망진창이 쉬운 다른 방향 (UTF-8에서 코드 포인트까지)입니다. –
UTF8은 인코딩 된 코드 포인트의 길이를 인코딩 된 바이트의 최상위 비트로 코딩하여 작동합니다. http://en.wikipedia.org/wiki/UTF-8#Description
C에서이 작은 기능을 발견 한 여기에서 http://www.deanlee.cn/programming/convert-unicode-to-utf8/은 테스트하지 않았습니다.
이 코드는 0x10000 이하의 코드 포인트 만 처리합니다 (Windows의 wchar_t는 실제로 UTF-16이므로). –
백 방식의 코드에 링크 : http://web.archive.org/web/20100305210636/http://www.deanlee.cn/programming/convert-unicode-to-utf8/ – Eloff
아마도 ICU을 제안할까요? i18n 문제를 적절하게 처리하는 "업계 표준"방식입니다.
저는 C 버전을 직접 사용하지 않았지만 ucnv_fromUnicode은 이후의 기능 일 수 있습니다.
나는 갈 수 없습니다. 이 작업을 위해 새로운 시스템이 아닌 라이브러리 세트에 대한 의존성을 소개합니다. 그래도 제안을 주셔서 감사합니다. –
어쨌든 iconv로 끝났습니다. 잔인한 것처럼 보일 수도 있지만 외부 종속성을 도입하지 않는 유일한 실제 솔루션처럼 보입니다. –
그래서 @ JesperE의 대답을 수락하고 그것을 upvote. – tvanfosson
제품에있는 버그가 수정되거나 더 나은 도구가 도입되었을 때 "더 이상 적합하지 않습니다"라고 생각했습니다. 질문자가 더 이상 대답에 관심이 없을 때가 아닙니다 ... –