일본어에서 글자가 깨지는 경우 (Shift-JIS)

Programming/日本語 2008/05/20 12:50
일본어 대응의 시스템 작성중 일부 글자가 깨지는 경우가 발생한다.
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 코드값을 가지고 있는 문자들에 다음과 같은 것들이 있다.

―    ソ    Ы    Ⅸ    噂      浬    欺    圭    構    蚕      十    申    曾    箪    貼      能    表    暴    予    禄
兔    喀    媾    彌    拿     杤    歃    濬    畚    秉     綵    臀    藹    觸    軆     鐔    饅    鷭    偆    砡


해결 방법으로
  1. 表 같은 이스케이프 문자코드를 가지고 있는 문자 뒤에 이스케이프 기호\ 를 붙인다.

    예 :  print "表\示";
  2. 더블쿼테이션으로 둘러싸지 않고 싱글쿼테이션으로 둘러싸기.




'Programming > 日本語' 카테고리의 다른 글

일본어에서 글자가 깨지는 경우 (Shift-JIS)  (0) 2008/05/20
Trackback 0 : Comment 0