UTF-8, UTF-16, BOM
-
- 해커
- Posts: 1146
- Joined: 2004 01 15 20:06 36
UTF-8, UTF-16, BOM
웹 표준 가이드에서 일부 언급했지만, 좀더 자세한 내용을 알고 싶으신 분은 다음을 참고하십시오. 특히, 가이드에서 BOM 등에 대해서는 자세한 내용이 없는데, 아래의 문서에서 자세히 설명하고 있습니다.
http://faq.ktug.or.kr/faq/UTF-8
이 글으
http://faq.ktug.or.kr/faq/UTF-8
이 글으
- CN
- 서포터즈
- Posts: 61
- Joined: 2005 01 02 01:57 54
- Contact:
-
- 해커
- Posts: 1146
- Joined: 2004 01 15 20:06 36
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을 많이 씁니다.
문자 집합(모두 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을 많이 씁니다.
-
- 해커
- Posts: 1146
- Joined: 2004 01 15 20:06 36
지금 와서 보니, 제가 여기에 쓴 내용이 제가 KTUG에 쓴 내용(맨 처음 글에서 링크한 문서)보다 덜 자세한 것 같은데요초보 T wrote:자세한 설명 감사드립니다.
아직까지 Wikipedia를 봐도 이해 하기 어려운 말로 쓰여 있어서 난감했는데, 빛알갱이님 설명 읽어 보니 이해 할 수 있겠네요.
저는 아스키 코드는 많이 안 쓰지만, UTF-8을 다른 사람이 많이 쓴다면, Web에서 사용하기에는 역시 UTF-8이 적당한 것 같군요.
지금 제가 답하고 있는 글에서 "ASCII 영역" (Unicode에서 0x0000에서 0x007F까지의 글자)의 글자를 여러 개 쓰셨어요. 쉽표, 공백 문자, 줄바꿈 문자, 마침표 등
아래 문서도 보세요. 아주 자세히 설명해 놓았군요. 단, 거기에 있는 여러 샘플 코드는 잘 검토해 보시고 쓰시거나 (예를 들어, UTF-8을 UCS2로 바꾸는 함수는 예외 처리를 하지 않고 있고, 유효하지 않은/BMP 범위 밖의 바이트 스트림이 들어 오면 변환 값이 정의되지 않는 경우도 있습니다.) 인터넷에서 비슷한 일을 하는 다른 코드를 쓰세요.
http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
빛알갱이 wrote: 지금 제가 답하고 있는 글에서 "ASCII 영역" (Unicode에서 0x0000에서 0x007F까지의 글자)의 글자를 여러 개 쓰셨어요. 쉽표, 공백 문자, 줄바꿈 문자, 마침표 등
정말 생각 해 보니, 쉼표, 공백 문자, 줄바꿈 문자, 마침표등은 아스키영역이군요.
정말 여러가지로 설명 감사드립니다.
문서 참고 해서 공부 하겠습니다.빛알갱이 wrote: 아래 문서도 보세요. 아주 자세히 설명해 놓았군요. 단, 거기에 있는 여러 샘플 코드는 잘 검토해 보시고 쓰시거나 (예를 들어, UTF-8을 UCS2로 바꾸는 함수는 예외 처리를 하지 않고 있고, 유효하지 않은/BMP 범위 밖의 바이트 스트림이 들어 오면 변환 값이 정의되지 않는 경우도 있습니다.) 인터넷에서 비슷한 일을 하는 다른 코드를 쓰세요.
http://www.jinsuk.pe.kr/Unicode/Unicode_intro-kr.html
여러가지로 설명 감사드립니다.
역시 이 분야는 끊임 없는 공부가 필요하네요. ^^.
Mac OS X는 UTF-8을 사용합니다.
Mac OS X는 UTF-8을 사용합니다. 또한 NFD(Normalization Form Decomposition)를 지원합니다. 윈도우는 UTF-16이 맞고요 NFC만 지원하고요...빛알갱이 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을 많이 씁니다.
Who is online
Users browsing this forum: No registered users and 1 guest