UTF-8, UTF-16, BOM

국내에 웹 사이트들이 웹 표준을 지키고 OS나 브라우저와 관계 없이 접근성을 향상 시키기 위한 사이트 버그 신고 및 문제 해결을 위한 게시판입니다.
Post Reply
빛알갱이
해커
해커
Posts: 1146
Joined: 2004 01 15 20:06 36

UTF-8, UTF-16, BOM

Post by 빛알갱이 »

웹 표준 가이드에서 일부 언급했지만, 좀더 자세한 내용을 알고 싶으신 분은 다음을 참고하십시오. 특히, 가이드에서 BOM 등에 대해서는 자세한 내용이 없는데, 아래의 문서에서 자세히 설명하고 있습니다.

http://faq.ktug.or.kr/faq/UTF-8

이 글으
초보 T

Post by 초보 T »

지금까지 숫자만 보고 UTF-16이 UTF-8보다 넒은 영역인 줄 알았는데, 그 반대이군요.
언제나 빛알갱이님의 조언에 소리 없이 조용히 감사하며, 불여우 잘 쓰고 있습니다.
좋은 문서 감사드립니다.
User avatar
CN
서포터즈
서포터즈
Posts: 61
Joined: 2005 01 02 01:57 54
Contact:

Post by CN »

초보 T wrote:지금까지 숫자만 보고 UTF-16이 UTF-8보다 넒은 영역인 줄 알았는데, 그 반대이군요.
언제나 빛알갱이님의 조언에 소리 없이 조용히 감사하며, 불여우 잘 쓰고 있습니다.
좋은 문서 감사드립니다.
반대이다 보다는 표현력은 동일하다고 보면 될 것 같습니다. 아쉬운 점은 가변 길이다 보니 일부 문자들은 지나치게 길고 그 일부 문자에 한글이 들어가서 한글 한자가 3바이트가 된다는 점입니다.
초보 T

Post by 초보 T »

CN wrote:반대이다 보다는 표현력은 동일하다고 보면 될 것 같습니다. 아쉬운 점은 가변 길이다 보니 일부 문자들은 지나치게 길고 그 일부 문자에 한글이 들어가서 한글 한자가 3바이트가 된다는 점입니다.
표현력은 동일한가요? 약간 어려워 진 것 같네요. 솔직히 지금 블로깅을 할 까 하는데, 코딩을 뭐로 해야 할 지 고민 중이라서, 이런 문서 보면, 자연스럽게 읽게 되네요.
뭐, 블로그야, 내용이 제일 중요한 것이지만, 표현법도 상당부분 차지 하니까...
설명 감사드립니다 ^^.
초보 T

Post by 초보 T »

UTF-8과 UTF-16은 동일한 문자를 표현한다. 하지만, 표현 할 때 사용하는 데이터 량을 비교하자면, UTF-8은 1바이트부터 4바이트까지를 문자 표현하는데 쓰고, UTF-16은 2바이트 또는 4바이트를 문자 표현하는데 쓴다.
이렇게 해석 하면 맞는 것인가요?
빛알갱이
해커
해커
Posts: 1146
Joined: 2004 01 15 20:06 36

Post by 빛알갱이 »

UTF-16, UTF-8, UTF-32 공히 유니코드/ISO 10646이라는
문자 집합(모두 1048576자 + 65536자 - 2048자를 표현 가능)을 표현하는 방법입니다. 따라서, 어느 것을 써도 표현할 수 있는
글자의 수와 종류는 완전히 동일합니다. UTF-8은 글자에 따라 1, 2, 3, 4
바이트로 나타내는데 반해, UTF-16은 글자에 따라 2바이트 (Basicl Multilingual Plane이라고 불리우는 유니코드 첫 부분에 있는 약 65,536자 - 엄밀히 말하면 이보다 작습니다만-는 2바이트) 혹은 4바이트(나머지 약 100만 글자)로 나타냅니다. UTF-32는 모든 글자를 4바이트로 나타내고요.

HTML, XML 등 마크업 문서에서는 US-ASCII에 속하는 글자들이(UTF-8에서는 한 바이트지만, UTF-16에서는 2 바이트) 많이 쓰이기 때문에, UTF-8을 쓴 한글 마크업 파일과 UTF-16을 쓴 한글 마크업 파일 사이에 크기 차이가 많이 나지 않습니다. 물론, 전송량을 줄이는데 절대적으로 중요한 경우에는 조그만 차이도 중요할 수 있으므로 UTF-16을 쓰기로 결정할 수도 있습니다.


대개 UTF-16이나 UTF-32는 OS 내부나 API, DB 등에서 유니코드 데이터를 다룰 때 많이 쓰고 (Java, Windows 32 API, Mac OS X 등이 UTF-16을 내부적으로 쓰고, glibc, Python은 UTF-32를 씁니다.), 외부와 소통을 할 때에는 US-ASCII와 호환성이 있다는 장점 때문에 UTF-8을 많이 씁니다.
초보 T

Post by 초보 T »

자세한 설명 감사드립니다.

아직까지 Wikipedia를 봐도 이해 하기 어려운 말로 쓰여 있어서 난감했는데, 빛알갱이님 설명 읽어 보니 이해 할 수 있겠네요.

저는 아스키 코드는 많이 안 쓰지만, UTF-8을 다른 사람이 많이 쓴다면, Web에서 사용하기에는 역시 UTF-8이 적당한 것 같군요.
빛알갱이
해커
해커
Posts: 1146
Joined: 2004 01 15 20:06 36

Post by 빛알갱이 »

초보 T wrote:자세한 설명 감사드립니다.

아직까지 Wikipedia를 봐도 이해 하기 어려운 말로 쓰여 있어서 난감했는데, 빛알갱이님 설명 읽어 보니 이해 할 수 있겠네요.
지금 와서 보니, 제가 여기에 쓴 내용이 제가 KTUG에 쓴 내용(맨 처음 글에서 링크한 문서)보다 덜 자세한 것 같은데요 :-)
저는 아스키 코드는 많이 안 쓰지만, UTF-8을 다른 사람이 많이 쓴다면, Web에서 사용하기에는 역시 UTF-8이 적당한 것 같군요.

지금 제가 답하고 있는 글에서 "ASCII 영역" (Unicode에서 0x0000에서 0x007F까지의 글자)의 글자를 여러 개 쓰셨어요. 쉽표, 공백 문자, 줄바꿈 문자, 마침표 등

아래 문서도 보세요. 아주 자세히 설명해 놓았군요. 단, 거기에 있는 여러 샘플 코드는 잘 검토해 보시고 쓰시거나 (예를 들어, UTF-8을 UCS2로 바꾸는 함수는 예외 처리를 하지 않고 있고, 유효하지 않은/BMP 범위 밖의 바이트 스트림이 들어 오면 변환 값이 정의되지 않는 경우도 있습니다.) 인터넷에서 비슷한 일을 하는 다른 코드를 쓰세요.

http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
초보 T

Post by 초보 T »

빛알갱이 wrote: 지금 제가 답하고 있는 글에서 "ASCII 영역" (Unicode에서 0x0000에서 0x007F까지의 글자)의 글자를 여러 개 쓰셨어요. 쉽표, 공백 문자, 줄바꿈 문자, 마침표 등


정말 생각 해 보니, 쉼표, 공백 문자, 줄바꿈 문자, 마침표등은 아스키영역이군요.

정말 여러가지로 설명 감사드립니다.
빛알갱이 wrote: 아래 문서도 보세요. 아주 자세히 설명해 놓았군요. 단, 거기에 있는 여러 샘플 코드는 잘 검토해 보시고 쓰시거나 (예를 들어, UTF-8을 UCS2로 바꾸는 함수는 예외 처리를 하지 않고 있고, 유효하지 않은/BMP 범위 밖의 바이트 스트림이 들어 오면 변환 값이 정의되지 않는 경우도 있습니다.) 인터넷에서 비슷한 일을 하는 다른 코드를 쓰세요.

http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
문서 참고 해서 공부 하겠습니다.
여러가지로 설명 감사드립니다.

역시 이 분야는 끊임 없는 공부가 필요하네요. ^^.
Namo

Mac OS X는 UTF-8을 사용합니다.

Post by Namo »

빛알갱이 wrote: 대개 UTF-16이나 UTF-32는 OS 내부나 API, DB 등에서 유니코드 데이터를 다룰 때 많이 쓰고 (Java, Windows 32 API, Mac OS X 등이 UTF-16을 내부적으로 쓰고, glibc, Python은 UTF-32를 씁니다.), 외부와 소통을 할 때에는 US-ASCII와 호환성이 있다는 장점 때문에 UTF-8을 많이 씁니다.
Mac OS X는 UTF-8을 사용합니다. 또한 NFD(Normalization Form Decomposition)를 지원합니다. 윈도우는 UTF-16이 맞고요 NFC만 지원하고요...
Post Reply

Who is online

Users browsing this forum: No registered users and 0 guests