FreeBSD에서 rrdtool에서 한글 쓰기

rrdtool은 버전 1.2로 올라가면서 트루타입 글꼴을 직접 그리는 것으로 완전히 전환을 하는 덕에, 라틴이 아닌 글자를 그릴 수 있는 기능이 들어갔습니다. 그렇지만, 이 기능이 mbstowcs(3)
이용해서 멀티바이트 문자열을 와이드캐릭터 문자열로 바꿨기 때문에,
와이드캐릭터가 유니코드가 아닌 플랫폼에서는 엉뚱한 글자가 출력되는
버그가 있었습니다.

POSIX 표준에서는 wchar_t에 글자를 유니코드로 저장하는 것을 강제로 하지 않고 있기 때문에, FreeBSD나 MacOS X 같은 플랫폼들은 wchar_t에 각 인코딩에서 가장 표현력이 높은 단순한 내부 형태로 저장하고 있습니다. 예를 들어 EUC-KR에서 ‘한’은 C7 D1인데, 이것을 리눅스와 솔라리스에서는 ‘한’의 유니코드 표현인 D55C로 저장하지만, FreeBSD에서는 C7D1로 저장합니다. 따라서, mbstowcs를 유니코드가 출력이 된다고 가정하고 쓰는 것은 잘못된 사용이라, FreeBSD에서 한글을 못 쓰게 된 것입니다.

그래서, 마침 그냥 주말에 시험전증후군의 영향으로 산만해진 틈을 타서, 학교 중도 잔여좌석 그래프를 그리는 rrd 그래프를 하나 그려 보면서, 제목과 범례에 한글로 나오게 패치를 해 봤습니다. –;

흐흐.. 패치는 그냥 일단은 mbstowcs를 매크로로 덮어버리는 방법으로;;
업스트림하기 위해서는 automake에 iconv 검출하는 부분을 넣어 줘야하는데.. 이거 참 automake를 오랜만에 보려니 머리가 아찔한게 –;;;; ㅠ.ㅠ.ㅠ

— 그러나 — 패치를 다 하고 보니, FreeBSD에서도 UTF-8 로캘을 쓰면 wchar_t에 유니코드로 저장을 하기 때문에, 알고 보면 setlocale만 제대로 하게 패치하면 되는 것이었는데.. 괜히 오바해서 엉뚱한 것까지 해버렸네요 -O-;; 그래도 혹시나 euc-kr 쓰시는 분들을 위해;; _-_

5 thoughts on “FreeBSD에서 rrdtool에서 한글 쓰기”

  1. 요즘에는 일본어가 필요한데 ^^ 누군가 해두었겠군요.
    그런식으로 와이드바이트는 유니코드가 저장된다고 오해하고 있는 사람들이 의외로 많은것 같더군요.

  2. 이 패치로 sjis나 euc-jp에도 통용이 될 것 같습니다.
    업스트림을 하기 전에 웹에서 찾아봤는데, 제대로 된 패치는 일본쪽에서도 안 나온 것 같고용.. 조만간 automake에 손 댈 엄두가 나면 한번 고쳐보려고요~ -O-

    munggo: UTF-8로 쓰세요 =3=3

  3. 만들어주신 패치중 rrd_graph.c는 자동으로 패치가 되지않아

    수동으로 패치 후 컴파일 했습니다만 에러가 납니다.

    ./.libs/librrd.so: undefined reference to libiconv_open'
    ./.libs/librrd.so: undefined reference to
    libiconv’

    혹 확인해 주실 수 있으신가요?

Comments are closed.