UTF-8 UTF-16LE BE 이해하기
UTF-8
텍스트문서를 저장하다 보면 보게 되는 아래 인코딩 방식 한 번쯤 보셨을 겁니다. 저도 깊이 생각해보지 못하고 늘 인코딩방식인 거만 알고 그냥 지나치곤 했는데 오늘은 UTF-8을 알아보겠습니다. 좀 어려운 이야기일 수 있습니다.
UTF-8은 "유니코드(Unicode)"를 위한 가변 길이 문자 인코딩 방식입니다. 이 인코딩은 전 세계의 모든 문자를 일관되게 표현하고 전송할 수 있는 방법을 제공하며, 인터넷에서 가장 널리 사용되는 인코딩 중 하나입니다.
UTF-8 특징
UTF-8의 주요 특징은 다음과 같습니다:
가변 길이 인코딩: UTF-8은 한 문자를 나타내기 위해 1바이트에서 4바이트까지 사용합니다. 이는 문자의 사용 빈도에 따라 다릅니다.
호환성: UTF-8은 기존의 7비트 ASCII 인코딩과 호환됩니다. ASCII 문자들은 UTF-8에서도 동일한 1바이트로 표현됩니다
효율성: 자주 사용되는 문자에는 적은 바이트를 할당하여 메모리 사용을 최적화합니다.
UTF-8 인코딩의 구조는 다음과 같습니다:.
U+0000부터 U+007F 범위에 있는 ASCII 문자들은 1바이트로 표현됩니다.
그 이상의 문자들은 2바이트에서 최대 4바이트까지 사용하여 표현됩니다.
각 바이트의 최상위 비트는 인코딩 된 바이트의 종류를 나타내는 데 사용됩니다.
예를 들어, 한글 ‘위’ (U+C704)는 UTF-8에서 다음과 같이 3바이트로 인코딩 됩니다:
U+C704 →1110 1100 10 011100 10 000100
U+C704→1110 1100 10 011100 10 000100
이는 16진수로 EC 9C 84로 표현됩니다.
UTF-8은 인코딩과 디코딩 과정에서 복잡한 연산을 필요로 하지 않으며, 바이트 경계를 쉽게 찾을 수 있어 처리가 효율적입니다.
이러한 특성 때문에 UTF-8은 다국어 지원이 필요한 웹 개발 및 다양한 프로그래밍 환경에서 널리 사용됩니다. 또한, UTF-8은 국제적인 텍스트 교환에 있어서 표준으로 자리 잡고 있으며, 다양한 시스템과 장치에서의 호환성을 보장합니다.
UTF-8은 전자 통신을 위한 가변 길이 문자 인코딩 표준입니다. 유니코드 표준에 의해 정의되며, 이름은 Unicode Transformation Format – 8-bit에서 유래되었습니다. UTF-8은 1바이트(8비트) 코드 단위를 사용하여 모든 1,112,064개의 유니코드 코드 포인트를 인코딩할 수 있습니다.
ASCII 호환성
가변 길이 인코딩: UTF-8은 1~4바이트를 사용하여 문자를 인코딩합니다. 더 자주 사용되는 숫자 값이 낮은 코드 포인트는 더 적은 바이트를 사용하여 인코딩됩니다.
ASCII와의 호환성: UTF-8은 ASCII와의 역호환성을 위해 설계되었습니다. 유니코드의 처음 128개 문자는 ASCII와 일대일로 대응되며, ASCII와 동일한 이진 값을 가진 단일 바이트를 사용하여 인코딩 됩니다.
효율성: UTF-8은 영어와 같은 ASCII 문자로만 구성된 파일을 그대로 인코딩할 수 있어 공간 낭비가 없습니다. 비 ASCII 문자가 몇 개 포함된 경우에도 파일 크기가 약간만 늘어납니다.
UTF-8은 현대 운영 체제, JSON과 같은 표준, 그리고 웹을 포함한 인터넷 기술에서 널리 구현되어 있으며, 2024년 기준으로 전 세계 웹 페이지의 98.2%, 상위 100,000개 페이지의 99.1%에서 사용되고 있습니다.
거의 모든 국가와 언어에서 웹상의 UTF-8 인코딩 사용률이 95% 이상입니다.
간단히 말해, UTF-8은 다양한 언어와 문자 시스템을 디지털 형태로 표현할 수 있는 유연하고 효율적인 방법을 제공합니다. 이는 전 세계적으로 통신과 데이터 교환을 용이하게 하는 중요한 기술입니다.
그러면 UTF-16LE BE는 또 무엇인가!
UTF-16LE
UTF-16LE (유니코드 변환 형식 - 16비트 리틀 엔디언)는 가장 낮은 바이트를 먼저 저장합니다. 예를 들어, 16진수 값 0x1234는 34 12로 저장됩니다.
UTF-16BE (유니코드 변환 형식 - 16비트 빅 엔디언)는 가장 높은 바이트를 먼저 저장합니다. 따라서 0x1234는 12 34로 저장됩니다.
어떤 인코딩이 사용되었는지 결정하기 위해, 텍스트 앞에 바이트 순서 표시(BOM)를 추가할 수 있습니다. 첫 두 바이트가 FE FF이면 UTF-16BE이고, FF FE이면 UTF-16LE입니다.
다음은 "Example"이라는 단어를 다른 인코딩으로 나타낸 시각적 예시입니다:
바이트 인덱스: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
------------------------------------------------------------
ASCII: 45 78 61 6d 70 6c 65
UTF-16BE: FE FF 00 45 00 78 00 61 00 6d 00 70 00 6c 00 65
UTF-16LE: FF FE 45 00 78 00 61 00 6d 00 70 00 6c 00 65 00
UTF-16BE나 UTF-16LE로 표시된 파일은 BOM을 사용하지 않아야 하며, 단순히 UTF-16으로 표시된 파일은 엔디언을 나타내기 위해 BOM을 사용할 수 있습니다.