'Bom'에 해당되는 글 2건

  1. 2010.04.23 iconv() 함수 완전정복(?)
  2. 2010.03.04 Unicode BOM(Byte Order Mark)
iconv() 함수에서
변환결과로 나와야 하는 방법이 unicode일 경우에는 (일단 다른건 안해봤으니 -ㅁ-?)
(strlen(inbuf) + 2) * 2 가 된다.

size_t iconv(iconv_t cd,
                     char **inbuf, size_t *inbytesleft,
                     char **outbuf, size_t *outbytesleft);

예를 들어 UTF-8을 UNICODE로 변환시에는
UTF-8 문자열 특성상, stelen(utf8str) == 100 일 경우
유니코드(2바이트) 스트링은 최소 25에서 최대 100 까지 변환이 된다.

그리고 iconv 특성상 처음에 2바이트 BOM(Byte Order Mark)을 붙이므로
실질적으로 변환을 위해 필요로 하는 outbuf의 길이는
(strlen(inbuf) + 2) * 2 가 된다.

원래대로라면
(strlen(inbuf) + 1) * 2 + 2 이고
+1 은 '\0'
+2 는 Unicode BOM(0xFEFF in big endian)이다.

[링크 : http://mwultong.blogspot.com/2006/05/qna-unicode-bom-byte-order-mark.html]


덧 : UTF-8로 인코딩된 아랍어의 경우, 조합은 별도로 해주어야 한다.
iconv()가 UNICODE로 변환은 해주지만, 그렇다고 해서 조합까지 해주지는 않는다.
신고
Posted by 구차니

댓글을 달아 주세요

회사에서 이야기 하는 BOM과는 다르다!(Bill of Material)
아무튼 이 BOM이라는 녀석은
일종의 헤더로서

텍스트 파일의 인코딩을 알려주는 역활을 한다.
예를 들어 UTF-8, ANSI 이런 구분을 하는 것도 이 BOM이 존재하기 때문에 가능한 것이다.


Bytes Encoding Form
00 00 FE FF UTF-32, big-endian
FF FE 00 00 UTF-32, little-endian
FE FF UTF-16, big-endian
FF FE UTF-16, little-endian
EF BB BF UTF-8
[링크 : http://www.unicode.org/faq/utf_bom.html]

[링크 : http://mwultong.blogspot.com/2006/05/qna-unicode-bom-byte-order-mark.html]
[링크 : http://devhome.tistory.com/11]
[링크 : http://en.wikipedia.org/wiki/Byte_order_mark]
신고
Posted by 구차니

댓글을 달아 주세요