한글 인코딩 정리 (자바를 중심으로)
2021.01.29 12:46
한글 인코딩 정리 (자바를 중심으로)
[1] 요약
| 인코딩 (코드페이지) | 자바의 대응 인코딩 | 문자셋 | 비고 |
|---|---|---|---|
| ASCII = US-ASCII | US-ASCII | (인코딩과 동일) | 기본적으로 0~127까지의 7bit 임. |
| ISO 8859-1 | ISO 8859-1 | 8bit 코드. 확장(extended) ASCII 의 일종으로 분류하기도 함. | |
| windows-1252 = cp-1252 | windows-1252 | 8bit 코드. 영문 윈도우에 기본적으로 사용되는 인코딩(?) | |
| euc-kr | EUC-KR | ks x 1001 = ks c 5601 | 한글 2350자 |
| (windows 95 이전 cp949) | x-IBM949 = Cp949 또는 x-IBM949C = Cp949C | 한글 2620자. euc-kr 에 비해 한글은 추가되었고, 특수문자, 한자의 포함여부가 약간 차이가 난다. x-IBM949C는 xIBM949와달리 0x5c이 원화표시가 아닌 역슬래시를 () 의미함. | |
| windows-949 = ms-949 = cp-949 | x-windows-949 = MS949 | UHC(Unified Hangul Code) = 확장 완성형 = 통합형 한글 코드 | 한글 11172자 (ks X 1001 에 8822자 추가). IANA에 등록되어 있지 않아서 통신용으로 사용할 수 없음. |
| utf-8, utf-16le, utf-16be, utf-32le, utf-32be | UTF-8, UTF-16, UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE | ? | 유니코드. |
[2] 부연 설명
-
문자셋(Chracter Set)과 인코딩(Encoding)은 다른 개념.
-
유니코드 문자셋에서 ‘가’ 는 U+AC00 값으로 표현함.
그러나 이것을 데이터로 저장할때는 인코딩의 종류(utf-8, utf-16be, utf-16le, utf-32be, utf-32le) 에 따라 대응하는 값이 각각 다르다.
-
US-ASCII 처럼 인코딩과 문자셋이 개념상 구분없이 사용될 수도 있는 경우도 있음.
-
CP(Code Page)는 문자셋보다는 인코딩 개념임.
-
CP949는 마이크로소프트사가 만들었음.
-
CP949는 최초에는 일부 한글만 표현 가능하였으나 윈도우 95부터는 확장 완성형(UHC)을 지원하여 모든 현대 한글 11172자를 표현할 수 있게되었음.
-
일반적으로 CP949는 확장 완성형을 모두 표현할수 있는 현재의 윈도우 한글 인코딩 방식을 의미 하나, 자바에서는 CP949가 예전의 한글 2350자만을 포함하는 문자셋/인코딩을 지칭할 때 사용하는 것으로 보임. 자바는 대신 x-windows-949 를 현재의 확장 완성형을 지원하는 한글 인코딩/문자셋을 지칭할 때 사용함.
-
윈도우 계열 인코딩을 ANSI라고 부르기도 하나 잘못된 표현임.
-
SBCS, DBCS, MBCS, WBCS는 주로 윈도우에서 프로그램이 메모리상의 문자열을 다루는 것과 관련하여, 문자셋들을 구분/분류하기 위해 사용하는 용어로 보임. SBCS는 주로 ASCII 계열에 대응하고 WBCS는 16비트 유니코드 문자셋에 대응한다고 보면 될듯.
[3] 분석 및 테스트에 관하여..
참고 문서들에 나와있는 설명으로는 자바에 정의된 문자셋 간의 차이가 명확해 보이지지 않은 점들이 있었습니다.
그래서 x-IBM949C와 x-IBM949 의 차이 등을 확인하기 위하여, 인터넷에 공개된 sun java 소스코드를 직접 분석하여 판단하였음을 알려드립니다.
그리고 EUC-KR, x-IBM949, x-windows-949 의 문자셋의 범위를 확인하기 위해 유니코드를 기준으로 어떤 문자가 포함되어있고 어떤 문자는 빠져있는지 아래에 작성한 프로그램으로 테스트 해보았습니다.
첨부해드린 파일을 Winmerge 등의 툴을 사용해서 확인해보시면 명확하게 파악하실 수 있으실것 같네요.
[4] 참고
(특히 아래 세가지는 한글 인코딩/문자셋에 개념을 잡아주는데 좋은 글입니다.)
http://helloworld.naver.com/helloworld/19187
http://helloworld.naver.com/helloworld/76650
http://jinuine.blogspot.kr/2013/09/ms949.html
(아래는 정리하면서 함께 참고한 글들입니다.)
http://ko.wikipedia.org/wiki/KS_X_1001
http://ko.wikipedia.org/wiki/KS_X_1003
http://ko.wikipedia.org/wiki/EUC-KR
http://ko.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80_949
http://en.wikipedia.org/wiki/ISO/IEC_8859-1
http://en.wikipedia.org/wiki/Windows-1252
http://www.iana.org/assignments/character-sets/character-sets.xhtml
http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html
(혹시, HTTP나, HTML, 그리고 톰켓과 관련한 사항이 궁금하시다면 아래 글을 정독해보세요. 제일 명확한 설명인듯 하더군요.)
http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
[출처] http://www.jollybus.kr/2014/05/%ED%95%9C%EA%B8%80-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%A0%95%EB%A6%AC-%EC%9E%90%EB%B0%94%EB%A5%BC-%EC%A4%91%EC%8B%AC%EC%9C%BC%EB%A1%9C/
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.

