추가) 프로젝트명을 바꾸셨네요 : )

제가 알려드린 내용에 아직까지 답이 없어서 조금 더 다른 내용을 보태어 봅니다.

libiconv 의 사용이 OS X의 HFS+에서 강제하는 정규화 문자열의 처리에 있다면
ttp://www.opensource.apple.com/source/libiconv/libiconv-26/libiconv/lib/utf8mac.h
에서 utf8mac_mbtowc 함수 안에 사용있는 ucs2_mbtowc() 를 부르지 않고 대신 UTF-16 문자열로 
변환해주는 *_mbtowc() 를 호출하게 해줘야 할 듯 합니다. 아니면 저 파일만 떼어내서 
대신 사용해도 될 듯 하네요.

거의 동일한 내용인 아래 소스를 참고해도 될 듯 합니다.
ttp://www.opensource.apple.com/source/xnu/xnu-1486.2.11/bsd/vfs/vfs_utfconvdata.h
ttp://www.opensource.apple.com/source/xnu/xnu-1486.2.11/bsd/vfs/vfs_utfconv.c


위 코드를 적절히 wchar_t 의 정규화 변환에 사용하면 libiconv 사용을 하지 않아도 되고

문제의 BMP를 벗어나는 문자의 정규화 에러를 막을 수 있습니다.




먼저 술집 2소식에 감사드립니다.


이번이 릴리즈 하신 버전을 보니 libiconv를 사용하신거라고 추측이 되지만,

맥에서 zip 파일을 압축해서 술집2로 열어보니 열리네요. 감사합니다.


하나의 문제는 언급했던 libiconv에 관련된 것인데요,

UTF-8-MAC -> ? 을 하는 경우에 libiconv의 UTF-8-MAC 구현상의 문제로 인해(UCS-2를 중간변환에 사용함)

U+10000 이상의 유니코드 문자열을 제대로 변환하지 못하고 에러를 냅니다.

그런 이유로 제가 첨부한 파일을 열어보시면 술집 2에서 인코딩을 UTF-8-MAC으로

고르면 프로그램이 비정상 종료되는 모습을 볼 수 있으실껍니다.


추가로 7zip과 rar가 유니코드를 사용하기는 하지만, 맥에서 압축을 하면 애플에서 HFS+ 에

저장된 NFD 정규화 파일이름을 그대로 압축파일에 가지고 있기 때문에, 그대로 윈도우에서

압축을 풀어주면 Windows XP에서는 합쳐진 모습을 제대로 보여주지 못할 뿐만 아니라,

비스타 이상이라면 사용자가 같은 이름을 가지는 파일을 하나의 폴더에 만들수 있고, 자신이 

덮어 썼다고 생각했는데 그렇게 되지 않는 경우가 생길 수 있습니다.

그래서 가급적 리눅스나 윈도우에서 주로 사용하는 NFC형태의 유니코드 정규화를 해 주는게 좀 더

나아보입니다. NFD와 NFC 정규형은 서로 1:1 변환이 되는 것이라서 파일명이 망가지는 걱정은

하시지 않으셔도 될듯 합니다. (단 애플은 BMP의 특정 글자들을 NFD형식으로 정규화해서 BMP를 

벗어나는 글자의 정규화 변환은 나중에 영향을 줄 수 있으나 BMP를 벗어나는 글자의 풀어쓰기 영역을

사용하는 문자셋이 그리 많지 않고 사용빈도가 적어서 영향이 없다고 생각하면 됩니다.)

항상 적용하는게 압축 해제 속도에 조금이나마 영향을 준다고 생각이 드시면 옵션에 지정할 수 있게

해 놓는 것도 좋을 듯 합니다.


그래서 위의 2가지 정규화와 관련된 문제를 해결하기 위해서 libiconv 대신 

귀찮으시더라도 Microsoft Internationalized Domain Names (IDN) Mitigation APIs

ttp://www.microsoft.com/downloads/details.aspx?displaylang=ko&FamilyID=ad6158d7-ddba-416a-9109-07607425a815

 를 사용해 zip, rar, 7zip에서 Apple의 변형된 UTF-8 NFD -> 유니코드 표준 NFC 정규화 변경을 

해 주셨으면 좋겠습니다. 위 링크의 normaliz.dll은 비스타 이상에서는  기본으로 들어있고 

나머지는 위 링크를 설치하면 나오는 재배포 패키지를 설치해야 합니다.


그리고 마지막으로 구현에 참고가 될까 싶어서 Rarlab의 unrarsrc-3.9.6.tar.gz 와

여기에 NFC 정규화 변경을 하는 부분 코드패치를 올려 둡니다. 제가 Visual C++ 6.0 에서 돌려본 것이라

헤더파일 등에 수정을 약간 하셔야 할 듯 합니다.


IDN API 배포본을 설치하고 미리 제가 빌드한 unrar.exe로 test2.rar 를 열어보시면 한글이 풀리지 않은

원래 샘플 모습을 보실 수 있습니다. 이를 동일한 내용이 들어있는 test2.zip 과 비교해 보시면 됩니다.


비록 소수의 Mac 사용자들이지만 조금만 관심을 가져주시길 부탁드립니다 : )