맨위로가기

UTF-16

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

UTF-16은 유니코드 문자를 인코딩하는 방식 중 하나로, 각 유니코드 코드 포인트를 1개 또는 2개의 16비트 코드 유닛으로 표현한다. 1980년대 후반 범용 문자 집합 개발 과정에서 시작되었으며, 16비트 기반의 UCS-2 인코딩의 한계를 극복하기 위해 서로게이트 쌍을 도입하여 확장되었다. UTF-16은 기본 다국어 평면(BMP)의 문자는 1개의 코드 유닛으로, BMP 외부의 문자는 2개의 코드 유닛(서로게이트 쌍)으로 인코딩한다. UTF-16은 윈도우, 자바 등 다양한 운영체제 및 프로그래밍 언어에서 사용되며, UTF-8, UTF-32, Shift_JIS 등 다른 인코딩 방식과 비교하여 장단점을 가진다.

더 읽어볼만한 페이지

  • 유니코드 변환 형식 - UTF-8
    UTF-8은 유니코드 문자를 표현하는 가변 길이 문자 인코딩 방식으로, ASCII 코드와 호환성을 유지하며 다양한 언어의 문자를 표현할 수 있도록 설계되었지만, 보안 문제점과 공간 효율성 측면에서 단점을 가진다.
  • 유니코드 변환 형식 - UTF-1
    UTF-1은 유니코드 초기 버전을 인코딩하기 위해 1992년에 설계된 가변 길이 문자 인코딩 방식으로, ASCII 호환성을 유지하고 ISO 2022 및 MIME과의 호환성을 고려했지만, "모듈로 190" 산술을 사용하는 특징과 현대 유니코드 표준과의 차이점을 가진다.
  • 유니코드에 관한 - UTF-8
    UTF-8은 유니코드 문자를 표현하는 가변 길이 문자 인코딩 방식으로, ASCII 코드와 호환성을 유지하며 다양한 언어의 문자를 표현할 수 있도록 설계되었지만, 보안 문제점과 공간 효율성 측면에서 단점을 가진다.
  • 유니코드에 관한 - UTF-1
    UTF-1은 유니코드 초기 버전을 인코딩하기 위해 1992년에 설계된 가변 길이 문자 인코딩 방식으로, ASCII 호환성을 유지하고 ISO 2022 및 MIME과의 호환성을 고려했지만, "모듈로 190" 산술을 사용하는 특징과 현대 유니코드 표준과의 차이점을 가진다.
  • 문자 인코딩 - 유니코드
    유니코드는 세계의 모든 문자를 하나의 컴퓨터 인코딩 표준으로 통합하기 위해 설계되었으며, 유니코드 컨소시엄에 의해 관리되고 UTF-8, UTF-16, UTF-32 등의 부호화 형식을 제공하지만, 일부 문자 표현 문제, 버전 간 비호환성, 레거시 인코딩과의 호환성 문제 등의 과제를 안고 있다.
  • 문자 인코딩 - UTF-8
    UTF-8은 유니코드 문자를 표현하는 가변 길이 문자 인코딩 방식으로, ASCII 코드와 호환성을 유지하며 다양한 언어의 문자를 표현할 수 있도록 설계되었지만, 보안 문제점과 공간 효율성 측면에서 단점을 가진다.
UTF-16
일반 정보
UTF-16 인코딩 예시
UTF-16 인코딩 예시
종류유니코드 변환 형식(UTF), 가변 너비 인코딩
포함 언어국제
인코딩 대상ISO/IEC 10646(유니코드)
기반UCS-2
설명
특징1개 또는 2개의 16비트 코드 유닛을 사용하여 유니코드를 가변 길이로 인코딩
호환성ASCII와 호환되지 않음
기타
관련 표준유니코드 표준

2. 역사

1980년대 후반, 기존 언어별 인코딩을 하나의 통일된 시스템으로 대체할 "범용 문자 집합"(UCS) 개발 작업이 시작되었다. 목표는 전 세계 대부분 언어의 문자와 과학, 수학, 음악 등 기술 분야의 기호를 포함하는 것이었다. 초기에는 문자당 2바이트(16비트)를 사용하는 65,536(216) 값의 인코딩(UCS-2)을 사용했다.[1][2][12]

ISO/IEC JTC 1/SC 2와 유니코드 컨소시엄이 이 작업을 병행했으며, 개발 중인 인코딩이 서로 호환되도록 문자 할당을 동기화했다. 초기 2바이트 인코딩은 "유니코드"라고 불렸지만, 현재는 "UCS-2"라고 불린다.[1][2][12]

그러나 216 문자가 충분하지 않다는 것이 명확해지면서,[13] IEEE는 더 큰 31비트 공간과 문자당 4바이트를 필요로 하는 인코딩(UCS-4)을 도입했다. 유니코드 컨소시엄은 문자당 4바이트가 많은 메모리와 디스크 공간을 낭비하고, 일부 제조업체가 이미 문자당 2바이트 기술에 투자했다는 이유로 반대했다. UTF-16 인코딩 방식은 이러한 타협의 결과로 개발되었으며, 1996년 7월 유니코드 표준 2.0 버전과 함께 도입되었다.[14] 2000년 IETF에서 발행한 RFC 2781에 명시되면서 국제 표준으로 자리잡았다.[15][16]

UTF-16은 국제 표준 ISO/IEC 10646 및 유니코드 표준의 최신 버전에 명시되어 있다. "UCS-2는 이제 구식으로 간주되어야 합니다. 이는 더 이상 10646 또는 유니코드 표준의 인코딩 형식을 나타내지 않습니다."[1][2] UTF-16은 더 많은 코드 포인트를 지원하거나 대리자에 의해 대체된 코드 포인트를 지원하도록 확장되지 않을 것이다.[17]

3. 설명

UTF-16은 유니코드 문자 인코딩 방식 중 하나로, 대부분의 문자를 16비트(2바이트)로 표현한다. 각 유니코드 코드 포인트는 1개 또는 2개의 16비트 코드 유닛으로 인코딩된다.[42]

기본 다국어 평면(BMP, U+0000 ~ U+FFFF)에 속하는 문자들은 하나의 16비트 코드 유닛으로 표현되며, 이 코드 유닛은 코드 포인트의 숫자 값과 동일하다. 예를 들어, 로마자 소문자 'z' (U+007A)는 0x007A로, 한자 '水' (U+6C34)는 0x6C34로 인코딩된다.

BMP 외부에 있는 문자들(U+10000 ~ U+10FFFF)은 서로게이트 쌍(Surrogate Pair)이라는 두 개의 16비트 코드 유닛을 사용하여 표현된다.

다음은 UTF-16 인코딩의 예시이다.

UTF-16으로 인코드된 "水z"와 높은음자리표(
)
인코딩바이트 순서바이트 열
UTF-16LE리틀 엔디언34 6C, 7A 00, 34 D8 1E DD
UTF-16BE빅 엔디언6C 34, 00 7A, D8 34 DD 1E
UTF-16리틀 엔디언, with BOMFF FE, 34 6C, 7A 00, 34 D8 1E DD
UTF-16빅 엔디언, with BOMFE FF, 6C 34, 00 7A, D8 34 DD 1E



UTF-16으로 인코딩된 문자는 16비트 단위로 처리되므로, 파일 입출력이나 통신 시에는 바이트 순서(Byte Order)를 고려해야 한다. UTF-16BE는 빅 엔디언, UTF-16LE는 리틀 엔디언 방식을 사용하며, UTF-16은 바이트 순서 표지(BOM)를 통해 엔디언을 명시하거나, BOM이 없는 경우 빅 엔디언으로 처리한다.[42]

3. 1. 서로게이트 쌍 (Surrogate Pair)

BMP 외부의 코드 포인트를 표현하기 위해 사용되는 특수한 코드 단위 쌍이다. 상위 서로게이트(High Surrogate, U+D800 ~ U+DBFF)와 하위 서로게이트(Low Surrogate, U+DC00 ~ U+DFFF)로 구성된다.[18]

코드 포인트에서 0x10000을 뺀 후, 그 값을 상위 10비트와 하위 10비트로 나눈다. 상위 10비트는 0xD800에 더해져 상위 서로게이트가 되고, 하위 10비트는 0xDC00에 더해져 하위 서로게이트가 된다.[19]

시각적으로 표현하면 다음과 같다:

```text

U' = yyyyyyyyyyxxxxxxxxxx // U - 0x10000

W1 = 110110yyyyyyyyyy // 0xD800 + yyyyyyyyyy

W2 = 110111xxxxxxxxxx // 0xDC00 + xxxxxxxxxx

```

서로게이트 쌍은 UTF-16에서 자기 동기화되는 특징을 가진다. 즉, 코드 유닛의 값 범위를 확인하면 해당 유닛이 문자의 시작인지 아닌지를 알 수 있어, 문자열 중간에서 시작해도 문자의 경계를 쉽게 찾을 수 있다. UTF-8도 이러한 장점을 공유한다.

하지만, 가장 많이 사용되는 문자가 모두 BMP에 있기 때문에, 서로게이트 쌍 처리가 제대로 테스트되지 않는 경우가 많다. 이는 잘 알려진 응용 소프트웨어에서도 버그나 보안 취약점으로 이어질 수 있다.

스칼라 값UTF-16비고
`xxxxxxxxxxxxxxxx``xxxxxxxxxxxxxxxx`
`000uuuuuyyyyyyxxxxxxxxxx``110110wwwwyyyyyy 110111xxxxxxxxxx``wwww = uuuuu - 1`



대리 코드 위치(Surrogate Code Point)라고 불리는 `U+D800`–`U+DFFF` 범위는 BMP 밖의 문자를 표현하는 서로게이트 쌍에 사용된다. 이 영역은 UTF-16에서만 사용되며, UTF-8, UTF-32에서는 사용되지 않는다. 유니코드 코드 위치의 최대값이 U+10FFFF인 이유는 UTF-16으로 표현할 수 있는 최대값이기 때문이다.

3. 2. U+D800 ~ U+DFFF (서로게이트)

유니코드 ''코드 포인트''는 1개 또는 2개의 16비트 ''코드 유닛''으로 인코딩된다. 216 이상인 코드 포인트("BMP 외부")는 ''두 개''의 16비트 코드 유닛을 사용하여 인코딩되는데, 이 두 개의 16비트 코드 유닛은 이전에 문자에 할당되지 않은 UTF-16 대리 범위 (0xD800–0xDFFF)에서 선택된다.[18] 이 범위의 값은 문자로 사용되지 않으며, UTF-16은 이를 개별 코드 포인트로 코딩할 수 있는 합법적인 방법을 제공하지 않는다.

다른 평면의 코드 포인트는 ''서로게이트 쌍''이라고 하는 두 개의 16비트 ''코드 유닛''으로 인코딩된다. 첫 번째 코드 유닛은 ''상위 서로게이트''(0xD800–0xDBFF), 두 번째는 ''하위 서로게이트''(0xDC00–0xDFFF)이다.

서로게이트 쌍을 생성하는 방법은 다음과 같다.

  • 0x10000을 코드 포인트 ''(U)''에서 빼서 16진수 범위 0x00000–0xFFFFF의 20비트 숫자 ''(U')''를 만든다.
  • 상위 10비트(범위 0x000–0x3FF)는 0xD800에 더해져 ''상위 서로게이트'' ''(W1)''를 생성한다.
  • 하위 10비트(범위 0x000–0x3FF)는 0xDC00에 더해져 ''하위 서로게이트'' ''(W2)''를 생성한다.


''상위 서로게이트''(0xD800–0xDBFF)와 ''하위 서로게이트''(0xDC00–0xDFFF)는 상호 배타적이므로, 서로게이트가 BMP 문자와 일치하거나 인접한 두 개의 ''코드 유닛''이 유효한 ''서로게이트 쌍''처럼 보이는 것은 불가능하다.

UTF-16에서 `U+D800`–`U+DFFF` 의 코드 위치를 대리 코드 위치(Surrogate Code Point)라고 부르며, BMP 밖의 하나의 코드 위치를 나타내는 연속된 두 개의 대리 코드 위치 쌍을 서로게이트 쌍이라고 부른다. 대리 코드 위치는 UTF-16에서만 사용되기 때문에 BMP의 이 영역에는 문자가 할당되어 있지 않으며, UTF-16 이외의 UTF-8, UTF-32에서는 사용되지 않는다.[42]

공식 유니코드 표준은 UTF-16을 포함한 어떤 UTF 형식도 서로게이트 코드 포인트를 인코딩할 수 없다고 명시하고 있다. 이러한 코드 포인트는 문자로 할당되지 않으므로 인코딩할 이유가 없다. 그러나 윈도우는 파일 이름[20] 및 기타 위치에서 페어가 없는 서로게이트(Unpaired Surrogate)를 허용하며, 이는 일반적으로 유니코드 표준에서 제외되었음에도 불구하고 소프트웨어에서 지원해야 함을 의미한다.

4. 인코딩 방식

UTF-16은 유니코드 문자열을 인코딩하는 방식 중 하나로, 각 문자를 16비트 코드 단위로 나타낸다. 1980년대 후반, 기존의 언어별 인코딩을 통합하여 전 세계의 문자와 기호를 표현하기 위한 범용 코드화 문자 집합(UCS) 개발 작업이 시작되었다. 초기에는 문자당 2바이트(16비트)를 사용하는 UCS-2 방식이 사용되었으나, 216개의 문자로는 충분하지 않다는 것이 명확해졌다.[1][2][12][13]

IEEE에서 더 큰 31비트 공간을 사용하는 UCS-4 인코딩을 제안했지만, 유니코드 컨소시엄은 메모리와 디스크 공간 낭비, 기존 투자 등의 이유로 반대했다. 그 결과, 1996년 7월 유니코드 표준 2.0 버전에서 UTF-16 인코딩 방식이 타협안으로 도입되었다.[14] UTF-16은 2000년 IETF에서 발행한 RFC 2781에 명시되어 있다.[15][16]

UTF-16에서, 대리 코드 위치를 제외한 코드 위치(유니코드 스칼라 값)는 16비트 부호 없는 정수를 부호 단위로 하는 부호 단위열로 나타낸다. 부호 단위열은 하나 또는 두 개의 부호 단위(16비트 또는 32비트)로 구성된다.

기본 다국어 평면(BMP)에 속하는 문자들(U+0000U+D7FF, U+E000U+FFFF)은 그대로 16비트 값으로 표현된다. BMP에 속하지 않는 문자들(U+10000U+10FFFF)은 다음과 같이 두 개의 16비트 코드 단위(서로게이트 쌍)로 표현된다.

스칼라 값UTF-16비고
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
000uuuuuyyyyyyxxxxxxxxxx110110wwwwyyyyyy 110111xxxxxxxxxxwwww = uuuuu - 1



여기서 U+D800U+DFFF 범위의 코드 위치는 서로게이트 쌍을 위해 예약된 대리 코드 위치이며, 이 영역에는 문자가 할당되지 않는다. UTF-16 이외의 UTF-8, UTF-32에서는 이 대리 코드 위치가 사용되지 않는다. 유니코드 코드 위치의 최댓값(U+10FFFF)은 UTF-16으로 표현할 수 있는 최대값이다.

UTF-16 인코딩 형식으로 표현된 문자는 정보 교환을 위해 파일 읽기/쓰기나 통신 시 적절한 방식으로 바이트 직렬화되어야 한다. 인코딩 스킴에는 UTF-16, UTF-16BE, UTF-16LE 세 종류가 있다. UTF-16BE는 16비트 정수를 빅 엔디언으로, UTF-16LE는 리틀 엔디언으로 직렬화한다. UTF-16의 경우에는 바이트 순서 표지(BOM)로 엔디언을 명시하거나, 상위 프로토콜로 지정되지 않고 BOM도 부착하지 않는 경우에는 빅 엔디언으로 하도록 정해져 있다.[42]

水z𝄞
(UTF-16으로 인코드된 물 수, z, 높은음자리표)
인코딩바이트 순서바이트 열
UTF-16LE리틀 엔디언34 6C, 7A 00, 34 D8 1E DD
UTF-16BE빅 엔디언6C 34, 00 7A, D8 34 DD 1E
UTF-16리틀 엔디언, with BOMFF FE, 34 6C, 7A 00, 34 D8 1E DD
UTF-16빅 엔디언, with BOMFE FF, 6C 34, 00 7A, D8 34 DD 1E


4. 1. 바이트 순서 (Byte Order)

UTF-16은 16비트 코드 유닛의 시퀀스를 생성한다. 각 유닛은 2개의 8비트 바이트로 구성되므로, 바이트 순서는 컴퓨터 아키텍처의 엔디안(바이트 순서)에 따라 달라질 수 있다.

코드 유닛의 바이트 순서를 인식하는 데 도움을 주기 위해, '''UTF-16'''은 U+FEFF 값을 갖는 바이트 순서 표시(BOM)를 코드 값 앞에 허용한다. (U+FEFF는 보이지 않는 너비가 없는 공백(ZWNBSP) 문자이다.) 디코더의 엔디안이 인코더와 일치하면 0xFEFF 값을 감지하지만, 반대 엔디안 디코더는 BOM을 U+FFFE로 해석한다.

BOM이 없는 경우, RFC 2781은 빅 엔디안(BE) 인코딩을 가정하도록 권장한다.[42] 그러나 실제로는 Windows가 기본적으로 리틀 엔디안(LE) 순서를 사용하기 때문에, 많은 응용 프로그램이 리틀 엔디안 인코딩을 가정한다.

표준은 '''UTF-16BE''' 또는 '''UTF-16LE'''를 지정하여 바이트 순서를 명시적으로 지정할 수 있도록 허용한다. 이 경우 BOM이 텍스트 앞에 붙지 않도록 되어 있으며, 시작 부분의 U+FEFF는 ZWNBSP 문자로 처리해야 한다.

인터넷 프로토콜의 경우 IANA는 "UTF-16", "UTF-16BE", "UTF-16LE"를 인코딩 이름으로 승인했다.

다음은 UTF-16으로 인코드된 예시이다.

水z𝄞 (UTF-16으로 인코드된 물 수, z, 높은음자리표)
인코딩바이트 순서바이트 열
UTF-16LE리틀 엔디언34 6C, 7A 00, 34 D8 1E DD
UTF-16BE빅 엔디언6C 34, 00 7A, D8 34 DD 1E
UTF-16리틀 엔디언, with BOMFF FE, 34 6C, 7A 00, 34 D8 1E DD
UTF-16빅 엔디언, with BOMFE FF, 6C 34, 00 7A, D8 34 DD 1E


4. 2. UTF-16BE, UTF-16LE

UTF-16BE는 16비트 정수를 빅 엔디언으로 직렬화하며, UTF-16LE는 리틀 엔디언으로 직렬화한다. UTF-16BE와 UTF-16LE에서는 바이트 순서 표지(BOM)를 붙이지 않으며, U+FEFF는 ZWNBSP(Zero Width Non-Breaking Space, 너비가 없는 띄어쓰기) 문자로 처리한다.[42]

UTF-16으로 인코드된 물 수(水), z, 높은음자리표()
인코딩바이트 순서바이트 열
UTF-16LE리틀 엔디언34 6C, 7A 00, 34 D8 1E DD
UTF-16BE빅 엔디언6C 34, 00 7A, D8 34 DD 1E


5. 예시

(UTF-16으로 인코드된 물 수, z, 높은음자리표)인코딩바이트 순서바이트 열UTF-16LE리틀 엔디언34 6C, 7A 00, 34 D8 1E DDUTF-16BE빅 엔디언6C 34, 00 7A, D8 34 DD 1EUTF-16리틀 엔디언, with BOMFF FE, 34 6C, 7A 00, 34 D8 1E DDUTF-16빅 엔디언, with BOMFE FF, 6C 34, 00 7A, D8 34 DD 1E



U+10437 (𐐷)를 UTF-16으로 인코딩하는 방법은 다음과 같다.



U+10437 (𐐷)를 UTF-16에서 디코딩하는 방법은 다음과 같다.

다음 표는 코드 포인트의 비트가 UTF-16 바이트 간에 어떻게 분산되는지 보여준다.

문자이진 코드 포인트이진 UTF-16UTF-16 16진수
코드 유닛
UTF-16BE
16진수 바이트
UTF-16LE
16진수 바이트
$U+00240000 0000 0010 01000000 0000 0010 0100002400 2424 00
U+20AC0010 0000 1010 11000010 0000 1010 110020AC20 ACAC 20
𐐷U+104370001 0000 0100 0011 01111101 1000 0000 0001 1101 1100 0011 0111D801 DC37D8 01 DC 3701 D8 37 DC
𤭢U+24B620010 0100 1011 0110 00101101 1000 0101 0010 1101 1111 0110 0010D852 DF62D8 52 DF 6252 D8 62 DF


6. 다른 인코딩과의 비교

UTF-8, UTF-32와 비교하면, 일반적인 일본어 중심 문장에서는 유니코드 부호화 방식 중 가장 작은 크기를 가진다. 추가 면 문자가 포함된 경우에는 바이트 순서로 정렬해도 부호 위치 순서와 같지 않다. 또한, UTF-8과 달리 ASCII와 호환되지 않는다.

Shift_JIS와 비교하면, Shift_JIS에서는 1바이트 문자와 2바이트 문자의 1바이트째와 2바이트째의 값 범위가 일부 중복된다. 하지만 UTF-16에서는 1 부호 단위 문자, 서로게이트 쌍의 전반부 부호 단위, 후반부 부호 단위가 모두 다른 값 범위를 가진다. 따라서 Shift_JIS에서 발생했던 "a"로 검색하면 2바이트째에 매치되는 경우, 도중에 읽어들일 경우 문자의 구분이 불분명해지는 경우, 1바이트째나 2바이트째가 누락될 경우 후속 문자가 모두 깨지는 경우 등의 문제는 발생하지 않는다. UTF-16에서는 누락이 있어도 영향을 받는 것은 해당 문자뿐이다.[43]

6. 1. UTF-8과의 비교

UTF-16은 UTF-8보다 동아시아 언어에 대해 공간 효율성이 더 높다고 주장되는 경우가 많은데, UTF-8에서 3바이트를 차지하는 문자에 2바이트를 사용하기 때문이다. 실제 텍스트에는 많은 공백, 숫자, 구두점, 마크업(예: 웹 페이지), 제어 문자 등이 포함되어 있으며, UTF-8에서는 1바이트만 차지하므로, 이는 인위적으로 구성된 텍스트의 밀집된 블록에만 해당된다. 데바나가리 문자벵골어의 경우에는 더 진지한 주장을 할 수 있는데, 여러 글자로 된 단어를 사용하고 모든 문자가 UTF-8에서는 3바이트, UTF-16에서는 2바이트를 차지하기 때문이다.

중국의 유니코드 인코딩 표준 GB 18030은 모든 언어에 대해, 단순히 중국어에만 국한되지 않고, 항상 UTF-16보다 파일 크기가 같거나 더 작게 생성한다(이는 자기 동기화를 희생함으로써 이루어진다). UTF-8, UTF-32와 비교하여 일반적인 일본어 중심의 문장에서는 유니코드 부호화 방식 중 최소 크기가 된다. 추가 면 문자가 포함된 경우, 바이트 순으로 정렬해도 부호 위치 순서와 같지 않다. 또한, UTF-8과 달리 ASCII 호환이 아니다.

Shift_JIS와 비교하여 Shift_JIS에서는 1바이트 문자와 2바이트 문자의 1바이트째와 2바이트째의 값 범위가 일부 중복되지만, UTF-16에서는 1 부호 단위 문자, 서러게이트 페어의 전반부 부호 단위, 후반부 부호 단위가 모두 다른 값 범위를 갖는다. 따라서 Shift_JIS에서 발생했던 문제는 발생하지 않는다. UTF-16에서는 누락이 있어도 영향을 받는 것은 해당 문자뿐이다.[43]

6. 2. Shift_JIS와의 비교

Shift_JIS와 비교했을 때, Shift_JIS에서는 1바이트 문자와 2바이트 문자의 1바이트째와 2바이트째의 값 범위가 일부 중복된다. 반면 UTF-16에서는 1 부호 단위 문자, 서로게이트 쌍의 전반부 부호 단위, 후반부 부호 단위가 모두 다른 값 범위를 갖는다. 따라서 Shift_JIS에서 발생했던 문제, 즉 "a"로 검색하면 2바이트째에 매치되는 경우, 도중에 읽어들일 경우 문자의 구분이 불분명해지는 경우, 1바이트째나 2바이트째가 누락될 경우 후속 문자가 모두 깨지는 경우 등의 문제가 발생하지 않는다. UTF-16에서는 누락이 발생해도 영향을 받는 것은 해당 문자뿐이다.[43]

7. 활용

마이크로소프트 윈도우는 윈도우 CE, 윈도우 2000, 윈도우 XP, 윈도우 2003, 윈도우 비스타, 윈도우 7[23], 윈도우 10 등 모든 버전의 OS API에서 텍스트 처리에 UTF-16을 사용한다.[24][25] 윈도우 NT 시스템 (윈도우 2000 이전)은 UCS-2만 지원했다.[26]

IBM i 운영 체제는 UCS-2 인코딩에 CCSID (코드 페이지) 13488을, UTF-16 인코딩에 CCSID 1200을 지정하지만, 시스템은 둘 다 UTF-16으로 처리한다.[30]

UTF-16은 퀄컴 BREW 운영 체제, .NET 환경, Qt 크로스 플랫폼 그래픽 위젯 툴킷에서 사용된다.

심비안 OS는 노키아 S60 및 소니 에릭슨 UIQ 핸드셋에서 UCS-2를 사용한다. iPhone 핸드셋은 단문 메시지 서비스에 대해 3GPP TS 23.038 (GSM) 및 IS-637 (CDMA) 표준에 명시된 UCS-2 대신 UTF-16을 사용한다.[31]

CD-ROM 미디어에서 사용되는 졸리엣 파일 시스템은 파일 이름을 UCS-2BE로 인코딩한다(파일 이름당 최대 64개의 유니코드 문자).

파이썬 2.0 버전은 공식적으로 내부에서 UCS-2만 사용했지만, "유니코드"로의 UTF-8 디코더는 올바른 UTF-16을 생성했다. 파이썬은 내부적으로 UTF-32를 사용하도록 컴파일할 수도 있었으며, 유닉스에서 종종 사용되었다. 파이썬 3.3은 문자열의 가장 큰 코드 포인트에 따라 ISO-8859-1, UCS-2, UTF-32 중 하나를 사용하도록 내부 저장소를 전환했다.[32]

자바는 원래 UCS-2를 사용했으며, J2SE 5.0에서 UTF-16 보조 문자 지원을 추가했다. 자바스크립트는 UCS-2 또는 UTF-16을 사용할 수 있다.[35]

UEFI는 기본적으로 문자열 인코딩에 UTF-16을 사용한다.

스위프트는 버전 5까지 문자열 저장에 UTF-16을 사용했다.[36]

PHP[37], MySQL[38] 등 많은 언어에서 UTF-16과 UCS-2를 서로 다른 인코딩으로 간주한다.

시스템이 내부적으로 어떤 인코딩을 사용하는지 확인하려면, 단일 비 BMP 문자를 포함하는 문자열의 "길이"를 확인하면 된다. 길이가 2이면 UTF-16이 사용되는 것이다.

많은 언어에서 따옴표로 묶인 문자열은 비 BMP 문자를 위한 새로운 구문이 필요하며, C 스타일 `"\uXXXX"` 구문은 명시적으로 4개의 16진수로 제한된다. 다음은 비 BMP 문자 표현 구문의 예시다.



Windows자바 (J2SE 5.0 이상)는 내부 표현에 UTF-16을 사용한다. Windows 내부 표현에서는 16비트 부호 없는 정수를 부호 단위로 하는 UTF-16 부호화 형식을 사용하며, 파일 등에서는 BOM(바이트 순서 표시)이 있는 (리틀 엔디안) UTF-16 부호화 체계가 주로 사용된다.

참조

[1] 서적 The Unicode Standard, version 6.0 Unicode Consortium 2011-02
[2] 웹사이트 FAQ: What is the difference between UCS-2 and UTF-16? https://www.unicode.[...] 2024-03-19
[3] 웹사이트 What is UTF-16? https://www.unicode.[...] Unicode, Inc. 2023-01-07
[4] 웹사이트 2022 Top Ten List: Why Support Beyond-BMP Code Points? https://ken-lunde.me[...] 2024-01-07
[5] 웹사이트 Adventures in Unicode SMS https://www.twilio.c[...] Twilio 2015-08-28
[6] 웹사이트 Should UTF-16 be considered harmful? https://softwareengi[...] 2024-11-20
[7] 웹사이트 HTML Living Standard https://html.spec.wh[...] 2020-06-15
[8] 웹사이트 Encoding Standard https://encoding.spe[...] 2023-04-22
[9] 웹사이트 Usage Statistics of UTF-16 for Websites, September 2024 https://w3techs.com/[...] 2024-09-03
[10] 웹사이트 Usage Statistics of UTF-8 for Websites, September 2024 https://w3techs.com/[...] 2024-09-03
[11] 웹사이트 Encoding Standard https://encoding.spe[...] 2018-10-22
[12] 웹사이트 MySQL :: MySQL 5.7 Reference Manual :: 10.1.9.4 The ucs2 Character Set (UCS-2 Unicode Encoding) https://dev.mysql.co[...]
[13] 웹사이트 What is UTF-16? https://www.unicode.[...] Unicode, Inc. 2018-03-29
[14] 웹사이트 Questions about encoding forms https://www.unicode.[...] 2010-11-12
[15] 간행물 Information technology – Universal Coded Character Set (UCS) 2014
[16] 간행물 The Unicode Standard https://www.unicode.[...] 2014
[17] 웹사이트 Unicode Character Encoding Stability Policies https://unicode.org/[...]
[18] 서적 The Unicode Standard, Version 7.0—Core Specification https://www.unicode.[...] The Unicode Consortium 2014-11-03
[19] 논문 UTF-16, an encoding of ISO 10646 https://tools.ietf.o[...] 2019-06-18
[20] 웹사이트 Maximum Path Length Limitation https://learn.micros[...] 2022-10-10
[21] 웹사이트 It's not wrong that "🤦🏼‍♂️".length == 7 https://hsivonen.fi/[...] 2021-03-15
[22] 웹사이트 Apple Developer Documentation https://developer.ap[...] 2021-03-15
[23] 웹사이트 Unicode (Windows) https://msdn.microso[...] 2011-03-08
[24] 웹사이트 Unicode https://msdn.microso[...] microsoft.com 2009-07-20
[25] 웹사이트 Surrogates and Supplementary Characters https://msdn.microso[...] microsoft.com 2009-07-20
[26] 웹사이트 Description of storing UTF-8 data in SQL Server https://support.micr[...] microsoft.com 2008-02-01
[27] 웹사이트 "[Updated] Patch for cmd.exe for windows xp for cp 65001 - Page 2 - DosTips.com" https://www.dostips.[...] 2021-06-17
[28] 웹사이트 Use UTF-8 code pages in Windows apps https://learn.micros[...] 2020-06-06
[29] 웹사이트 UTF-8 support in the Microsoft Game Development Kit (GDK) - Microsoft Game Development Kit https://learn.micros[...] 2023-03-05
[30] 웹사이트 UCS-2 and its relationship to Unicode (UTF-16) https://www.ibm.com/[...] IBM 2019-04-26
[31] 웹사이트 Adventures in Unicode SMS https://www.twilio.c[...] Twilio 2015-08-28
[32] 웹사이트 PEP 0393 – Flexible String Representation https://www.python.o[...] 2015-05-29
[33] 웹사이트 PEP 623 – Remove wstr from Unicode https://peps.python.[...] 2023-02-24
[34] 웹사이트 JEP 400: UTF-8 by Default https://openjdk.org/[...] 2023-03-12
[35] 웹사이트 JavaScript's internal character encoding: UCS-2 or UTF-16? · Mathias Bynens https://mathiasbynen[...]
[36] 웹사이트 UTF-8 String https://swift.org/bl[...] 2019-03-20
[37] 웹사이트 PHP: Supported Character Encodings - Manual https://php.net/manu[...]
[38] 웹사이트 MySQL :: MySQL 8.0 Reference Manual :: 10.9.2 The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding) https://dev.mysql.co[...] 2023-02-24
[39] 웹사이트 ECMA-334: 9.4.1 Unicode escape sequences http://en.csharp-onl[...]
[40] 웹사이트 The Java Language Specification, Third Edition https://docs.oracle.[...] 2019-10-11
[41] 문서 UTF는、UnicodeではUnicode Transformation Formatの略、[[ISO/IEC 10646]]ではUCS Transformation Formatの略とされる。
[42] 웹사이트 The Unicode Standard Version 12.0 https://www.unicode.[...] The Unicode Consortium 2019-03
[43] 웹사이트 FAQ - UTF-8, UTF-16, UTF-32 & BOM https://www.unicode.[...] The Unicode Consortium 2017-06-27



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com