2003년 10월에 Mono에 CP949
코덱을 넣고서는 C# 문법도 다 까먹고 그냥 무관심하게 있었는데,
얼마 전에 어떤 한국분이 영어로 잘 안 돌아간다고 메일을 보내셔서
2년만에 오래간만에 C# 코드를 좀 보게 되었습니다.
아직 디버거에 익숙하지 않아서 그냥 System.Console.WriteLine 으로
열심히 돌아다녀보니까, 으하하하. copy & paste 버그를 하나
발견했습니다. Mono CJK 코덱들은 공유 dll에 들어가 있는 정적 바이트
배열 데이터를 가지고 디코드를 하는데, 한국어 코드페이지인 CP949는 데이터를 쓰는 영역이
KSX1001 영역, UHC 레벨 1 영역, UHC 레벨 2 영역 이렇게 3가지로
나뉘어 있습니다. 그런데, UHC 레벨 2 영역이 첫 번째 바이트가
0xA1로 시작하는 것으로 돼 있는데, 코드 안에서는 레벨 1 것을
붙여넣기 해서 수정하다보니 0x81에서 시작하는 계산식이
그대로 남아있어서;; -ㅇ-;;;
아마 그때 테스트해 봤을 때는 인코딩 하는 것은 열심히 다
테스트를 했는데, 디코드는 확장완성형 부분은 글자가 터미널에서
안 써져서 귀찮아서 테스트를 안 했더니만 이렇게 돼 버렸네요;;
흐흐.. 그래서 방금 패치를 제출했습니다.
간단한 문제이니까 Mono 다음 버전에는 아무래도 고쳐지겠죠?
참, 그리고 11월 1일에 지미안의 에노모토 아쯔시씨가 CP949에서
EUC-KR도 제대로 지원하게 수정했더군요~ 다음 버전엔 EUC-KR도
쓸 수 있게 되었습니다. 🙂
오오.. 2년만에 보는 소스를 순식간에;
아참 포스팅에 대한 버그보고를 하자면, 아마 그 일본인 개발자의 이름은 에노모토 아쯔시일거에요. 일본사람들이 영어식으로 쓸때는 항상 이름을 앞에 빼고 성을 뒤로 돌리지만 한국식으로는 성이 앞이니까요.
아항! 에노모토가 성이었군요. 역시 뭔가 알고 나니까 에노모토가 성같이 느껴지네요 -ㅇ-;;
코덱 개발자는 다른 나라 언어를 조금이라도 읽고 쓸줄 알아야 겠네요. 일본 사람이 한국어 코덱을 고친다든가.. 그쵸?
에.. 사실 저는 CJKCodecs를 만들었지만.. 중국, 대만, 홍콩, 일본에서 쓰는 말 하나도 모릅니;;;
에이 왜그러세요~ 일본어 몇년 배우고 중국어도 한학기 배웠어도 말도 잘 모르고 코덱같은것도 못만드는 사람도 있는데~ ….. ( ”);;;