텍스트의 인코딩 관련 질문입니다.
왜 ks_c나 Shift-JIS 등의 코드로 인코딩된 텍스트 파일을
unicode쪽(UTF-8이나 UTF-16 등)으로 바꿔서 저장하면
용량이 확 늘어나는 걸까요?[...]
혹시 unicode계 인코딩은 모든 문자를 2바이트 취급 한다거나 그런 건가요?
전부터 쭉 궁금했기에 한 번 여쭤봅니다.
- ?
-
?
딴지.
UTF-16 은 영어마저도 모두 2Byte 로 표현, UTF-8은 아스키코드는 그대로 8bit, 이외의 영역은 2~3Byte 를 사용합니다.
뒤 숫자가 의미하는것이 16은 16바이트 단위로 끊어서 표현하고 8은 8바이트 단위로 끊어서 표현하는 것인데, 한글의 경우 3바이트를 사용합니다.
KS-C, Shift-JIS, EUC-KR 등등은 모두 2Byte 문자체계이고 표시된 언어만 지원하지만, UTF는 전세계 언어를 모두 표현하고자 고안된 것으로 언어에 따라서 1~3바이트를 사용합니다.
따라서 유니코드는 반드시 2바이트를 쓰는게 아니라 그때그때 다릅니다.
-
딴지 2.
UTF-16은 우리가 일반적으로 말하는 유니코드가 아니라 서로게이트 페어라는 것을 뜻합니다. 아래에 설명 들어갑니다.
유니코드 자체는 문자 하나를 2바이트로 표현하는 UCS2와 4바이트로 표현하는 UCS4로 나뉩니다. 각각의 바이트는 1바이트부터 셀, 로우, 플레인, 그룹의 순서로 불리는데요. 즉, 256개의 셀이 모여 1개의 로우가 되고, 256개의 로우가 되어 1개의 플레인이 되는 식입니다.
우리가 흔히 사용하는 2바이트의 유니코드는 이 중 00 플레인을 의미하며, 일반적으로도 이 코드만 정의되어 있습니다. 따라서 65,536자만 파고 있으면 됩니다. 나머지 플레인은 직접 쓰이는게 아니고 서로게이트 페어라는 방식을 써서 플레인 00으로 끌어와서 씁니다. 그러나 쓰이는 경우는 제가 유니코드 컨소시엄에 몸 담기 시작한 1997년 이후로 한 번도 못 봤습니다.
UTF는 엄밀하게 말하면 유니코드가 아니라 유니코드를 8비트 시스템에서 깨지지 않게 정상적으로 전송하기 위한 규격입니다. 이게 왜 필요하냐면 8비트 시스템은 문자로만 이루어진 것이 아니라 특수한 제어 문자들을 포함하고 있어서 이 문자들이 전송되면 특별한 동작을 하게 되어 있습니다. 이런 시스템에서 정상적으로 표현하기 위한 방법으로 UTF, 즉 유니코드 트랜스퍼 포맷(Unicode Transfer Format)이라는 게 정의됩니다.
이 UTF에는 크게 두 가지가 있는데, 현재는 그 중 UTF-8이 제일 많이 쓰입니다. 그리고 khunter님 말씀과는 달리 UTF-8은 3바이트가 아니라 최대 4바이트까지 연장됩니다. 범위는 따로 설명 안드리겠으나, 제가 쓴 책에 컨버팅 소스가 있습니다. (퍽)
이 정도면 설명이 되었을지...
-
?
요즘 기억이 쇠퇴해 가는듯 해서...
분명 4바이트까지 였던것 같았는데 웬지 가물가물하고 많이 쓰이는게 3바이트라서 그냥 그렇게 썼어요. T.T
이제 늙었나벼...
-
?
오~~~~ 멋진 설명....
-
?
오오; 제가 기대한 이상의 엄청난 질의 설명이군요..
답변 주신 분들 전부 감사드립니다. 그간 궁금했던 게 싹 해결됐군요.
역시 StartPDA에는 엄청난 실력자분들이 많이 계시는군요..
감사합니다.
아무거나 질문 답
PDA 빼고 뭐든지 물어보세요.
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
네 맞습니다. 유니코드는 한글자가 2바이트로 구성되기 때문에 2배로 늘어나는 겁니다. ㅋㅋ