블로그 이미지
초딩입맛제주아재
하고 싶은 것만 하며 살고 싶다

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
2007. 1. 9. 13:18 Programing

출처: http://openlook.org/trac/wiki/EUC

EUC (Extended Unix Coding) 인코딩은 중국과 한국에서 가장 널리 쓰이는 인코딩 형태로, 단순미와 강력함이 장점입니다. ;) (일본과 대만에서도 유닉스 유저들은 널리 쓰고 있습니다.)

EUC 인코딩 8비트 영역을 모두 사용하며, 8비트를 크게 4개로 나눕니다.

  • CL(Control-Left): 0x00-0x1f
  • GL(Graphic-Left): 0x20-0x7f
  • CR(Control-Right): 0x80-0x9f
  • GR(Graphic-Right): 0xA0-0xff

그림으로 하면

8 bit 범위
CL GL CR GR
0x00 ~ 0x1f 0x20 ~ 0x7f 0x80 ~ 0x9f 0xa0 ~ 0xff

GR은 보통 2바이트 시퀀스로 붙여서 94x94 문자셋을 할당하는 데, EUC-CN과 EUC-KR의 경우에는 그냥 단순히 GL에는 ASCII를 할당하고, GR에는 각각 GB2312와 KS X 1001을 할당하는 것으로 끝납니다. 결국, KS X 1001의 30-21에 배치되어 있는 '가'라는 글자는 EUC-KR 인코딩에서 GR에 배치되면서 MSB가 세팅되어 0xB0A1로 최종적으로 표현됩니다.

그런데, GL, GR을 고정적으로 할당한 CN, KR과는 달리 EUC-TW나 EUC-JP에서는 사용할 수 있는 문자셋이 여러 평면으로 나뉘어져 있기 때문에, 단순히 미리 할당된 것만으로는 사용될 수 없어서, 0x8e와 0x8f의 SS(Single-Shift) 코드들을 사용합니다. EUC-JP의 경우에는 다음과 같이 배치가 되어 있습니다.

문자셋 코드 설명
ASCII [0x20-0x7f] 아스키는 항상 GL에 배치됩니다.
JIS X 0201 0x8e [0xa1-0xdf] JIS X 0201중 반각 카타카나 부분은 앞에 0x8e를 쓴 다음에 씁니다.
JIS X 0208 [0xa1-0xfe] [0xa1-0xfe] JIS X 0208 문자들은 각각 MSB를 세팅해서 그냥 씁니다.
JIS X 0212 0x8f [0xa1-0xfe] [0xa1-0xfe] JIS X 02012 문자들은 0x8f를 앞에 쓴 다음에 MSB를 세팅해서 씁니다.

이렇게 되어서, 결국 EUC-JP는 1/2/3 바이트 가변폭 인코딩이 되고, 화면 출력과 코드 너비가 다른 인코딩이 됩니다. (불편하지만 별 수 없는~)

EUC-TW는 현재 할당된 평면이 17개 (유효평면 10개)나 되기때문에, 더욱 더 복잡한데,

문자셋 코드 설명
ASCII [0x20-0x7f] 아스키는 항상 GL에
CNS11643-1 [0xa1-0xfe] [0xa1-0xfe] Plane 1을 기본 GR에 배치합니다.
CNS11643-1~16 0x8e [0xa1-0xb0] [0xa1-0xfe] [0xa1-0xfe] Plane 1 <!> 부터 16까지는 0x8e를 앞에 붙이고, 그 다음에는 1번부터 순서대로 0xa1부터 16번은 0xb0까지 쓴 다음에 진짜 두 글자를 MSB 세팅해서 붙입니다.

이렇게 되어서, 결국 1/2/4 바이트 가변폭 인코딩이 됩니다. 그런데, Plane 1은 2바이트짜리와 4바이트짜리에 둘 다 할당이 되어있는데, 둘 중 어느 한가지만 옳은 것은 아니고, 표준에서 둘 다 사용할 수 있도록 되어있습니다. (둘은 서로 동등 연속--equivalent sequence--로 처리해야합니다.)

posted by 초딩입맛제주아재