[unicode] UTF-8과 유니 코드의 차이점은 무엇입니까?

Wikipedia UTF-8 페이지 에 따르면 사람들의 의견이 상충되는 것으로 들었습니다 .

그들은 똑같지 않습니까? 누군가가 명확히 할 수 있습니까?



답변

다른 사람들이 대답을 확장하려면 :

컴퓨터에 이상적으로 표시해야 할 문자가 많은 언어가 많이 있습니다. 유니 코드는 각 문자에 고유 번호 또는 코드 포인트를 할당합니다.

컴퓨터는 바이트와 같은 숫자를 처리합니다. 여기서 약간의 기록을 건너 뛰고 메모리 주소 문제를 무시하면 8 비트 컴퓨터는 8 비트 바이트를 하드웨어에서 쉽게 표현할 수있는 가장 큰 숫자 단위로 취급합니다 .16 비트 컴퓨터는 확장됩니다. 그것은 2 바이트 등입니다.

ASCII와 같은 오래된 문자 인코딩은 (사전) 8 비트 시대에서 왔으며 당시 컴퓨팅에서 지배적 인 언어, 즉 영어를 0에서 127 (7 비트) 범위의 숫자로 작성하려고합니다. 알파벳과 대문자가 아닌 대문자, 숫자 및 문장 부호로 된 26 자로 된 알파벳은 꽤 잘 작동했습니다. ASCII는 영어 이외의 다른 언어의 경우 8 비트로 확장되었지만이 확장으로 사용 가능한 추가 128 개의 숫자 / 코드 포인트는 표시되는 언어에 따라 다른 문자로 매핑됩니다. ISO-8859 표준은이 매핑의 가장 일반적인 형태입니다. ISO-8859-1 및 ISO-8859-15 (ISO-Latin-1, latin1이라고도하며 8888 ISO 표준에는 두 가지 버전이 있습니다).

그러나 둘 이상의 언어로 된 문자를 나타내려면 충분하지 않으므로 사용 가능한 모든 문자를 단일 바이트로 크 래밍하면 작동하지 않습니다.

본질적으로 두 가지 다른 유형의 인코딩이 있습니다. 하나는 더 많은 비트를 추가하여 값 범위를 확장합니다. 이러한 인코딩의 예는 UCS2 (2 바이트 = 16 비트) 및 UCS4 (4 바이트 = 32 비트)입니다. ASCII 및 ISO-8859 표준과 본질적으로 동일한 문제로 어려움을 겪습니다. 한계가 크게 높아도 값 범위가 여전히 제한되어 있기 때문입니다.

다른 유형의 인코딩은 문자 당 가변 바이트 수를 사용하며 가장 일반적으로 알려진 인코딩은 UTF 인코딩입니다. 모든 UTF 인코딩은 대략 동일한 방식으로 작동합니다. UTF-8의 경우 8 비트, UTF-16의 경우 16 비트, UTF-32의 경우 32 비트 인 단위 크기를 선택합니다. 그런 다음 표준에서는 이러한 비트 중 일부를 플래그로 정의합니다. 비트가 설정되면 일련의 단위에서 다음 단위가 동일한 문자의 일부로 간주됩니다. 설정되지 않은 경우 본 기기는 한 문자를 완전히 나타냅니다. 따라서 가장 일반적인 (영어) 문자는 UTF-8에서 1 바이트 (UTF-16에서 2 개, UTF-32에서 4 개) 만 차지하지만 다른 언어 문자는 6 바이트 이상을 차지할 수 있습니다.

멀티 바이트 인코딩 (위의 설명 후에 멀티 유닛이라고 말해야 함)은 상대적으로 공간 효율적이라는 장점이 있지만 하위 문자열 찾기, 비교 등과 같은 작업은 모두 문자를 유니 코드 코드로 디코딩해야한다는 단점이 있습니다. 이러한 작업을 수행하기 전의 포인트 (단축키가 있음)가 있습니다.

UCS 표준과 UTF 표준은 모두 유니 코드에 정의 된대로 코드 포인트를 인코딩합니다. 이론적으로 이러한 인코딩은 인코딩이 지원하는 범위 내에서 임의의 수를 인코딩하는 데 사용될 수 있지만 물론 이러한 인코딩은 유니 코드 코드 포인트를 인코딩하기 위해 만들어졌습니다. 그리고 그것은 그들 사이의 관계입니다.

Windows는 소위 “유니 코드”문자열을 UTF-16 문자열로 처리하지만 대부분의 UNIX는 기본적으로 UTF-8로 기본 설정되어 있습니다. UTF-8의 단위 크기는 ASCII와 같으며 대부분의 프로토콜은 ASCII 시대에 설계되었으므로 HTTP와 같은 통신 프로토콜은 UTF-8에서 가장 잘 작동하는 경향이 있습니다. 반면에 UTF-16은 최고의 평균을 제공합니다. 모든 살아있는 언어를 표현할 때 공간 / 처리 성능을 .

유니 코드 표준은 32 비트로 표현할 수있는 것보다 적은 코드 포인트를 정의합니다. 따라서 모든 실제적인 목적으로 UTF-32와 UCS4는 UTF-32의 다중 단위 문자를 다룰 필요가 없으므로 동일한 인코딩이되었습니다.

희망은 몇 가지 세부 사항을 채 웁니다.


답변

이 주제를 설명하기 위해 예제를 사용하겠습니다.

A chinese character:      汉
it's unicode value:       U+6C49
convert 6C49 to binary:   01101100 01001001

지금까지 마술은 없었습니다. 매우 간단합니다. 이제이 문자를 하드 드라이브에 저장하기로 결정했다고 가정하겠습니다. 그러기 위해서는 문자를 이진 형식으로 저장해야합니다. ‘01101100 01001001’그대로 그대로 보관할 수 있습니다. 끝난!

하지만 잠깐만, ‘01101100 01001001’은 한 글자입니까, 두 글자입니까? 내가 말했기 때문에 이것이 한 캐릭터라는 것을 알았지 만 컴퓨터가 읽을 때는 전혀 모른다. 따라서 컴퓨터가 컴퓨터를 하나로 취급하도록하려면 일종의 “인코딩”이 필요합니다.

‘UTF-8’의 규칙은 다음과 같습니다. http://www.fileformat.info/info/unicode/utf8.htm

Binary format of bytes in sequence

1st Byte    2nd Byte    3rd Byte    4th Byte    Number of Free Bits   Maximum Expressible Unicode Value
0xxxxxxx                                                7             007F hex (127)
110xxxxx    10xxxxxx                                (5+6)=11          07FF hex (2047)
1110xxxx    10xxxxxx    10xxxxxx                  (4+6+6)=16          FFFF hex (65535)
11110xxx    10xxxxxx    10xxxxxx    10xxxxxx    (3+6+6+6)=21          10FFFF hex (1,114,111)

위의 표에 따르면, ‘UTF-8’형식을 사용하여이 문자를 저장하려면 문자 앞에 ‘헤더’를 붙여야합니다. 중국어 문자는 16 비트 길이 (이진 값을 직접 계산)이므로 충분한 공간을 제공하므로 행 3의 형식을 사용합니다.

Header  Place holder    Fill in our Binary   Result
1110    xxxx            0110                 11100110
10      xxxxxx          110001               10110001
10      xxxxxx          001001               10001001

한 줄로 결과를 작성하십시오.

11100110 10110001 10001001

한자의 UTF-8 (이진) 값입니다! (직접 확인하십시오 : http://www.fileformat.info/info/unicode/char/6c49/index.htm )

요약

A chinese character:      汉
it's unicode value:       U+6C49
convert 6C49 to binary:   01101100 01001001
embed 6C49 as UTF-8:      11100110 10110001 10001001

추신 : 파이썬 에서이 주제를 배우려면 여기를 클릭하십시오.


답변

“유니 코드”는 불행히도 상황에 따라 다양한 방식으로 사용됩니다. 가장 올바른 용도 (IMO)는 코드화 된 문자 세트입니다 . 즉 문자 세트 와 이를 나타내는 문자와 정수 코드 포인트 간의 맵핑 입니다.

UTF-8 은 문자 인코딩-바이트 시퀀스에서 문자 시퀀스로 또는 그 반대로 변환하는 방법입니다. 유니 코드 문자 집합 전체를 다룹니다. ASCII는 문자 당 단일 바이트로 인코딩되며 다른 문자는 정확한 코드 포인트 (현재 정의 된 모든 코드 포인트에 대해 최대 4 바이트, 즉 U-0010FFFF까지)에 따라 더 많은 바이트를 사용하며 실제로 4 바이트는 최대 U-001FFFFF).

“유니 코드”가 문자 인코딩의 이름 (예 : .NET Encoding.Unicode 속성)으로 사용되는 경우 일반적으로 UTF-16을 의미합니다. 가장 일반적인 문자를 2 바이트로 인코딩 합니다. 일부 플랫폼 (특히 .NET 및 Java)은 UTF-16을 “기본”문자 인코딩으로 사용합니다. 단일 UTF-16 값으로 인코딩 할 수없는 문자 ( “서로 게이트 쌍”으로 인코딩 됨)에 대해 걱정해야하는 경우에는 털이 문제가되지만 대부분의 개발자는 이에 대해 걱정하지 않습니다 (IME).

유니 코드에 대한 일부 참조 :


답변

UTF-8은 유니 코드를 인코딩하는 특별한 방법입니다.

응용 프로그램과 사용하려는 데이터에 따라 다양한 인코딩을 선택할 수 있습니다. 내가 아는 한 가장 일반적인 것은 UTF-8, UTF-16 및 UTF-32입니다.


답변

유니 코드는 코드 포인트 , 즉 문자를 나타내는 숫자 만 정의 합니다 . 이러한 코드 포인트를 메모리에 저장하는 방법 은 사용 중인 인코딩에 따라 다릅니다 . UTF-8은 다른 많은 것들 중에서 유니 코드 문자를 인코딩하는 한 가지 방법입니다.


답변

유니 코드 는 ISO / IEC 10646과 함께 UCS (Universal Character Set) 를 정의하는 표준으로, 실제로 알려진 모든 언어를 나타내는 데 필요한 모든 기존 문자의 수퍼 세트입니다.

유니 코드 는 레퍼토리의 각 문자에 이름과 숫자 ( 문자 코드 또는 코드 포인트 )를 지정합니다.

UTF-8 인코딩 은 컴퓨터 메모리에서 이러한 문자를 디지털 방식으로 나타내는 방법입니다. UTF-8은 각 코드 포인트를 일련의 8 진수 (8 비트 바이트)로 매핑합니다.

예를 들어

UCS 문자 = 유니 코드 한 문자

UCS 코드 포인트 = U + 24B62

UTF-8 인코딩 = F0 A4 AD A2 (16 진수) = 11110000 10100100 10101101 10100010 (bin)


답변

유니 코드 는 이 문자 세트를 인코딩하기 위해 문자 세트 ( UCS ) 및 인코딩 ( UTF )을 정의하는 표준 일뿐 입니다. 그러나 일반적으로 유니 코드는 표준이 아닌 문자 집합을 참조합니다.

읽기 , 절대 절대 최소 모든 소프트웨어 개발자를 긍정적으로 유니 코드와 문자 집합 (변명!)에 대해 알아야 하고 유니 코드에서 5 분 .