input 으로 들어오는 string이 어떤 인코딩 형식(UTF-8, UTF-16등)인지 알 수 있는 방법이 있나요?

friendwang의 이미지

C 코드나 C++ 코드를 이용해서..

제목과 같이 입력받은 string이 UTF-8, UTF-16 등과 같은 코드 형식으로 들어올때...
어떤 인코딩 방식인지 구별할 수 있는 방법이 있나요?

아니면... 어떤 인코딩이 들어오더라도 무조건 UTF-8로 변환할 수 있는 방법은 있는지 궁금합니다..

iconv_open(to, from) 에서는 from을 알아야 사용할 수 있다보니...
from이 어떤 방식인지를 몰르면 아무것도 못하게 되어 버리네요... ㅠ.ㅠ

ddoman의 이미지

모두 유니코드라면
아래의 글이 도움이 될 겁니다.

3.  Encoding
 
   JSON text SHALL be encoded in Unicode.  The default encoding is
   UTF-8.
 
   Since the first two characters of a JSON text will always be ASCII
   characters [RFC0020], it is possible to determine whether an octet
   stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
   at the pattern of nulls in the first four octets.
 
           00 00 00 xx  UTF-32BE
           00 xx 00 xx  UTF-16BE
           xx 00 00 00  UTF-32LE
           xx 00 xx 00  UTF-16LE
           xx xx xx xx  UTF-8

RFC 4627, JSON message, 에 나와 있는 string encoding 부분입니다: http://www.ietf.org/rfc/rfc4627.txt
위에 나와있듯이
첫 2바이트가 Ascii코드라는 가정하에, 읽어서 분석해보면, 어느 유니코드 인코딩인지 알수 있습니다.

하지만, native character set까지 포함시켜버리면...
아마 힌트 정도의 불확실한 방법들말고는 없을것같은데...

native character set에 대해서는 잘 모르지만, 만약 각 나라가 서로 협의없이 그냥 각자 만든것이었고, 따라서 충돌하는 부분이 존재한다면
character set autodetect는 힘들듯..

semmal의 이미지

http://wiki.kldp.org/wiki.php/%B1%E8%C1%A4%B1%D5/CharDet

다만, charset이 중복되는 경우가 많기 때문에 어떤 detecting도 완벽하지 않다는 걸 아셔야 합니다.

------------------------------
How many legs does a dog have?