JIS -> Shift JIS 변환
일본에서 DICOM 인코딩에 사용하는 character set은 주로 ISO 2022 IR 13과 ISO 2022 IR 87이다.
ISO 2022 IR 13은 JIS X 0201 Romanji이고 (반각 카타카나가 포함되어 있음),
ISO 2022 IR 87은 JIS X 0208 Kanji이다.
캐릭터 셋의 전환을 위해서 Escape sequence라는 것을 사용한다.
Japanese text encoding 참조.
이런걸 알기까지 무척 오래 걸렸다.
일본 윈도우즈에서 기본 코드페이지는 932로서 Shift JIS를 사용하므로, DICOM 파일에 인코딩되어있는 JIS 코드를 Shift JIS로 변환하여야 한다.
윈도우즈에서 기본 제공하는 API를 사용해 봤는데(특정 코드페이지를 유니 코드로 변환하였다가 다른 코드 페이지로 다시 변환하는 방법), 함수가 실행되는 윈도우즈의 언어에 따라서 출력이 다르게 나오는 것 같았다. 이제 어떻게 하지?
이래저래 찾아보다가 RTF Converter라는 것을 찾았다. 일본사람이 개발했으니 잘 될 것 같았다.
아직까지는 잘 되는 것 같다. 코드 페이지 50220(JIS)을 932(S-JIS)로 변환하도록 하면 된다.
Rtfconv.dll을 사용하였고, 사용한 코드의 예는 다음과 같다.
CString dstStr;
// get the destination string lengthint
len = RtfconvStringEx(str, NULL, srcCodePage, dstCodePage, NULL, 0);
char* buf = dstStr.GetBuffer(len);
// conversion
len = RtfconvStringEx(str, buf, srcCodePage, dstCodePage, NULL, len);
dstStr.ReleaseBuffer();
———-
2009-03-04
일본에서 다시 연락이 와서 다시 찾아보았다.
DICOM에서 지원해야 하는 일본어 캐릭터셋은 다음과 같다.
ASCII (ISO-IR 6)
JIS X 0201 Katakana (ISO-IR 13)
JIS X 0201 Romaji (ISO-IR 14)
JIS X 0208 Kanji (ISO-IR 87)
JIS X 0212 Kanji (ISO-IR 159)
이중에서 JIS X 0201 Katakana (ISO-IR 13)과 JIS X 0212 Kanji (ISO-IR 159)를 지원하지 못하고 있었다.
RTF Converter 소스를 수정해서 JIS X 0201 Katakana (ISO-IR 13)의 escape sequence (ESC 02/09 04/09 또는 ESC ) I 또는 0x1b 0x29 0x49)를 지원하도록 하였다.
그러나 JIS X 0212 Kanji (ISO-IR 159)는 당분간 지원하지 못할것 같다. S-JIS로의 변환이 안되기 때문이다. 결국 프로그램이 유니 코드로 가야하는 것인가.