일본어 대응의 시스템 작성중 일부 글자가 깨지는 경우가 발생한다.
Shift_JIS 문자코드 환경에서 발생하는 5C 문제라고 한다.
일본어 문자코드 종류와 왜 이런 문제가 발생하는지 간략하게 설명.
일본어에는 크게 다음 4개의 문자코드가 있다. (물론 더 있지만 가장 많이 사용되는 코드들임)
- JIS
메일에서 사용됨.
- EUC-JP
일본어 유닉스 환경에서 사용됨.
- Shift_JIS
윈도우등에서 사용. 휴대폰은 거의 대부분이 이 코드 사용.
- Unicode
우리와 마찬가지로 컴퓨터가 미국에서 만들어 졌다는 이유로 한글 , 일본어 표현에 있어서 영어와 다르게 열라 머리쓰고 해서 2바이트로 표현이라는 방법을 사용하고 있다.
예를 들어 Shift_JIS 코드에서 [ 表示 ] 를 표현할때
表 示
95 5C | 8E A6
의 코드값을 가지게 된다.
순서로 설명하면 코드값이 처음에 95가 나타나면 일본어다라고 알고 다음값까지 포함해서 5C 까지 값을 읽어 들여 表 로 인식하고 다음으로 8E 값이 오면 이것도 일본어다라고 알고 다음값 A6 을 읽어 들여 示 로 인식한다.
그리하여 表示 라고 출력을 하고..지지고 볶고....하는것이다.보통이라면....말이다.
그런데 여기서 하나 문제가 이 表示 라는 문자가 가지고 있는 코드값이다. 정확히는 表 가 가지고 있는 코드값이다.
表의 코드값 95 5C 에서 두번째 바이트값 5C 은 이스케이프 문자 \ 의 코드값과 같다.
따라서 코드값을 읽어들이는 순서가
95 \ 8E A6 가 되어 \ 는 건너뛰고 95 8E | A6 가 되어 버린다.
95 8E 의 코드값을 가지는 侮 가 되어 버리고 A6 의 값을 가지고 있는 ヲ 를 표시하게된다.
이런 이유로 일본어에서 Shift_JIS 를 사용시 문자가 깨지는 경우가 생긴다.
5C 코드때문에 생기는 문제라 5C 문제라고 한다.
表 처럼 5C 코드값을 가지고 있는 문자들에 다음과 같은 것들이 있다.
― ソ Ы Ⅸ 噂 浬 欺 圭 構 蚕 十 申 曾 箪 貼 能 表 暴 予 禄
兔 喀 媾 彌 拿 杤 歃 濬 畚 秉 綵 臀 藹 觸 軆 鐔 饅 鷭 偆 砡
해결 방법으로
- 表 같은 이스케이프 문자코드를 가지고 있는 문자 뒤에 이스케이프 기호\ 를 붙인다.
예 : print "表\示";
- 더블쿼테이션으로 둘러싸지 않고 싱글쿼테이션으로 둘러싸기.