안녕하세요. c언어를 공부하고 있는 리눅스 유저입니다.
똑같은 문자더라도 유니코드에서는 어떤 UTF 버전을 사용하는 지에 따라서 다른 바이트 조합을 사용하더군요. 제가 UTF-32LE로 표현된 4 바이트를 가지고 UTF-8 바이트로 변경하는 방법이 있을까요? 그 둘 간의 규칙을 알아내서 스스로 비트를 조작하는 방식으로 하고싶습니다.
감사합니다!
... "그 둘 간의 규칙을 알아내서 스스로 비트를 조작하는 방식" 을 하시려면 힘들지 않을까요? libiconv 라는 라이브러리한번 찾아보세요.
제가 그 규칙을 아는게 사실 목적이라서요. 규칙을 알고 직접 하고싶습니다. 라이브러리 함수를 사용하는 방법밖에는 없을까요?ㅠㅠ
그게 목적이라면 직접하시는 거죠!! 다른 라이브러리는 어떻게 했나 보는것도 참고하면 좋지요.
구현된 라이브러리 보는 것도 하나의 방법이겠네요. 혹시 구현되어있는 라이브러리를 어디서 볼 수 있는지 아시는지요?ㅠㅠ
UTF8 의 비트 구조는 https://ko.wikipedia.org/wiki/UTF-8 참고하시면 되고...
http://read.pudn.com/downloads182/sourcecode/unix_linux/854401/Unicode2Utf8.cpp__.htm
std::string unicode2utf8(WCHAR* str) { unsigned char u1, u2, u3, u4; std::string ret; WCHAR uc; while(*str) { uc = *str; if (uc < 0x80) { ret += (char)*str; } else if (uc < 0x800) { u2 = 0xC0 | uc >> 6; u1 = 0x80 | uc & 0x3F; ret+=u2; ret+=u1; } else if (uc < 0x10000) { u3 = 0xE0 | uc >> 12; u2 = 0x80 | uc >> 6 & 0x3F; u1 = 0x80 | uc & 0x3F; ret+=u3; ret+=u2; ret+=u1; } else if (uc < 0x200000) { u4 = 0xF0 | uc >> 18; u3 = 0x80 | uc >> 12 & 0x3F; u2 = 0x80 | uc >> 6 & 0x3F; u1 = 0x80 | uc & 0x3F; ret+=u4; ret+=u3; ret+=u2; ret+=u1; } str++; } return ret; }
======== 서명 ======= 주거지는 www.indidev.net 입니다.
답글 감사합니다. 덕분에 문제 해결에 도움이 됐어요^^
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
...
...
"그 둘 간의 규칙을 알아내서 스스로 비트를 조작하는 방식" 을 하시려면 힘들지 않을까요?
libiconv 라는 라이브러리한번 찾아보세요.
글쓴이입니다
제가 그 규칙을 아는게 사실 목적이라서요. 규칙을 알고 직접 하고싶습니다. 라이브러리 함수를 사용하는 방법밖에는 없을까요?ㅠㅠ
그게 목적이라면 직접하시는 거죠!!
그게 목적이라면 직접하시는 거죠!!
다른 라이브러리는 어떻게 했나 보는것도 참고하면 좋지요.
조언 감사합니다.^^
구현된 라이브러리 보는 것도 하나의 방법이겠네요.
혹시 구현되어있는 라이브러리를 어디서 볼 수 있는지 아시는지요?ㅠㅠ
예제 소스입니다.
UTF8 의 비트 구조는 https://ko.wikipedia.org/wiki/UTF-8 참고하시면 되고...
http://read.pudn.com/downloads182/sourcecode/unix_linux/854401/Unicode2Utf8.cpp__.htm
======== 서명 =======
주거지는 www.indidev.net 입니다.
이런 식의 규칙이었군요.
답글 감사합니다. 덕분에 문제 해결에 도움이 됐어요^^
댓글 달기