중화사전망 - 서예자전 - 유니코드 사전 (Unicode dictionary)

유니코드 사전 (Unicode dictionary)

우리 모두 알고 있듯이, 컴퓨터는 이진 계산 방법을 사용합니다. 1 바이트는 8 비트를 차지합니다 (9 비트가 아닌 8 비트가 10 비트인 이유는 무엇입니까? 데이터, 그림, 문자, 소리 등 , 특정 숫자 값으로 변환한 다음 컴퓨터가 처리할 수 있도록 이진 데이터로 변환해야 합니다. 이 과정은 코딩입니다. 이 기사에서 언급 한 코딩은 텍스트 코딩에 대한 소개 일뿐입니다.

현대 컴퓨터 기술은 미국에서 시작되었고, 코딩은 당연히 미국에서 기원했다. ASCII (American information exchange standards code) 코드는 영어 문자, 아라비아 숫자 및 일부 공통 기호가 포함된 최초의 범용 컴퓨터 코드 세트이며, *** 128 은 1 바이트를 차지하고 첫 번째 숫자는 0 으로 보충됩니다. 예를 들어, 일반적으로 사용되는 대문자 a 는 65(0 10000 1) 이고 소문자 a 는 97 이므로 JAVA 에서는 다음과 같이 대/소문자를 변환할 수 있습니다.

문자 집합은 문자 그대로 지정된 문자를 포함하는 모음이며, 인코딩은 단어를 해당 숫자 코드로 변환하는 것입니다. AscII 코드와 마찬가지로 128 자의 특정 문자를 포함하며 각 문자에는 문자 세트라고 하는 일련 번호가 지정됩니다. 인코딩은 문자 세트에서 해당 일련 번호를 찾은 다음 인코딩 규칙에 따라 일련 번호를 특정 값으로 변환하는 것과 같습니다. 이를 인코딩이라고 합니다. AscII 코드는 비교적 간단하며 1 바이트만 차지하며 코드 테이블의 일련 번호 값과 동일한 인코딩 결과를 가지므로 문자 세트와 인코딩 개념의 구분이 엄격하지 않습니다.

컴퓨터 기술이 발달함에 따라 AscII 코드는 라틴 문자를 제한하는 데만 사용할 수 있으며, 이는 비영어권 국가의 사용에 심각한 영향을 미쳤다. 이에 따라 각 국가와 지역은 현지 언어에 해당하는 코딩 방법을 개발했다. GB23 12 는 국가표준총국이 제정한 한자 문자 세트 표준코드이며, GB 는 국가표준을 대표한다. 실제로 GB23 12 에는 중국어 외에 라틴 문자, 그리스 문자, 일본어, 러시아어 및 기타 일반 문자가 포함되어 있습니다.

GB23 12 는 2 바이트를 차지합니다. 즉, 수용 가능한 문자 수는 2 16 ***65536 입니다. 관리를 용이하게 하기 위해 GB23 12 는 모든 문자를 96 자 그룹으로 나눕니다. 각 그룹을 영역이라고 하고, 문자가 있는 위치를 위치라고 하며, 각 문자에 해당 지역 번호가 있습니다. 예를 들어 한자' 안' 이 있는 지역은 16 지역이고 위치 일련 번호는 18 이고 지역 번호는 16 18 입니다. 지역번호가 있으면 어떻게 코드로 변환합니까? 아주 간단합니다. 지역번호를 분리하고 지역번호와 위치번호를 각각 0xA0 을 더하면 해당 코드입니다. 따라서' 안' 의 GB23 12 코드는 0xa0+160xa0+18 = 0xb0b2 입니다.

지금까지 GB23 12 의 소개는 기본적으로 완료되었지만 한 가지 의문점이 남아 있습니다. GB23 12 의 AscII 코드는 어떻게 처리합니까? 실제로 GB23 12 는 AscII 코드와 호환됩니다. 위에서 설명한 대로 GB23 12 코드는 위치 코드에 각각 0 을 추가하여 얻습니다. A 의 코드는 10 10, 즉 GB23 1 입니다.

GBK 는 GB23 12 의 업그레이드 버전으로 상용한자뿐만 아니라 번체자, 편측부, 산간자 등이 포함되어 있어 한자를 사용하는 거의 모든 장면을 만족시킬 수 있다.

유니코드는 세계 모든 문자와 기호를 수용할 수 있는 국제 인코딩 기구가 개발한 문자 인코딩 체계입니다. 범위는 0-0x 10FFFF 에서 17 그룹으로 나뉩니다. 각 그룹을 평면이라고 하며 각 평면에는 65536 자가 포함되어 있습니다. 실제로 현재 가장 일반적으로 사용되는 기본 평면 (BMP) 과 같은 몇 개의 평면만 사용되고 있습니다. 범위는 0-0xFFFF 입니다. 0x00 10000 에서 0x10ffffff 까지의 다른 범위를 보조 평면 (SMP) 이라고 합니다. 사실, BMP 는 기본적으로 우리의 일상적인 사용 중의 모든 요구 사항을 충족시킬 수 있다.

유니코드에는 전 세계적으로 사용되는 거의 모든 문자가 포함되어 있습니다. 예를 들어 한자' 앤' 의 유니코드 인코딩은 0x5B89 입니다.

Utf 인코딩이란 무엇입니까? 위에서 설명한 유니코드는 각 문자에 해당하는 숫자 값을 지정하는 문자 세트입니다. Utf 는 다양한 방법을 사용하여 문자의 해당 값을 저장하고 다른 구현 방법에 따라 utf-8/ 16/32 로 나누는 특정 구현 방법입니다.

Utf8 은 가변 길이 코드입니다. 1 바이트인 경우 Ascall 코드와 같습니다. 멀티바이트인 경우 첫 번째 바이트의 첫 번째 비트가 1 을 채우기 시작하고 몇 개의 1 바이트가 몇 바이트를 나타냅니다. 예를 들어 1 10x xxxx 는 2 바이트를 나타내고 두 번째 바이트는 처음부터 끝까지 65438 입니다.

한자' 안' 을 예로 들면 유니코드는 0x5B89 로 인코딩되어 이진으로 변환되어 UTF-8 의 공백에 채워지고, 여분의 위치는 0 으로 채워져 결과를 얻을 수 있다. 0xE5AE89.

이제 문자 세트와 인코딩을 살펴보겠습니다. 유니코드는 문자 세트이고 UTF-8 인코딩은 문자 세트를 구현하는 한 가지 방법이며 동일한 개념이 아닙니다.

이제 utf- 16 코드를 살펴보겠습니다. Utf- 16 의 길이는 2 바이트 또는 4 바이트로 고정되어 있습니다. 일반적으로 유니코드의 기본 평면 BMP 에 해당하는 2 바이트를 사용할 수 있습니다. 유니코드로 인코딩되고 2 바이트 미만의 숫자 앞에 0 으로 채워지는 것도 한자' 앤' 이다. 유니코드 인코딩은 0x5B89 이므로 UTF-6549 입니다. 따라서 AscII 코드도 2 바이트를 차지하며 일부 공간을 낭비할 수 있습니다. 유니코드 보조 평면의 문자를 인코딩할 때 utf- 16 은 4 바이트를 차지하며 일반적으로 거의 사용되지 않습니다. 구체적인 인코딩 규칙은 다루지 않습니다.

Utf-32 인코딩은 4 바이트를 차지하며 모든 유니코드 코드에 해당합니다. 이런 인코딩 방식은 기본적으로 불필요하고 깊이 이해할 필요도 없다.

이 단어들은 보통 나타나는 빈도가 낮다. LE 는 작은 엔디안 바이트 순서, 작은 엔디안 바이트 순서, BE 는 큰 엔디안 바이트 순서, 큰 엔디안 바이트 순서, 각각 컴퓨터 영역에서 데이터를 저장하는 두 가지 방법을 나타냅니다.

큰 끝 시퀀스:

작은 끝:

사실, 우리는 컴퓨터가 일상적으로 사용되는 방식에 관심을 가질 필요가 없다. 그러나 UTF- 16 을 인코딩할 때 두 가지 인코딩 방법 (예: 0x5E89, 큰 끝 값은 0x5E89, 작은 끝 값은 0x895E 로 표시) 도 있습니다. 두 방법을 구분하기 위해 UTF- 16 을 인코딩할 때 데이터 스트림의 시작 부분에 통합 식별자가 추가되고 0xFEFF 는 해당하는 큰 끝 바이트 순서를 나타냅니다.

Bom 전체 이름 바이트 순서 번호는 바이트 순서 번호입니다. Utf- 16 외에도 UTF-8 은 BOM 이 0xEFBBBF 로 고정된 BOM 을 추가할 수 있습니다. Bom 이 있는 UTF-8 을 인코딩 방법으로 선택하면 이 BOM 이 생성된 파일 스트림에 나타납니다. 왜 UTF-8 에 BOM 이 필요하지 않습니까? Utf8 의 길이는 가변적이기 때문에 첫 번째 바이트 정보를 기준으로 각 문자의 길이를 판단하며 양수 및 음수 순서 문제는 없습니다. 우리가 매일 사용하는 UTF-8 에는 BOM 이 없습니다.

문자 인코딩 소개를 읽었는데, 여기에 의문이 하나 있습니다. Java 의 char 유형은 한자를 저장할 수 있습니까?

Java 에서 Char 는 두 자를 차지하므로 UTF-8 을 사용하면 중국어를 저장할 수 없다는 결론을 쉽게 내릴 수 있습니다. GB23 12 및 utf- 16 과 같은 다른 인코딩 방식은 중국어를 저장하는 데 사용할 수 있습니다. 그렇죠?

사실, 일은 그렇게 간단하지 않다. 편집기에서 선택한 인코딩 방법에 관계없이 Java 의 char 에는 영향을 주지 않습니다. 실제로 char 는 유니코드의 기본 평면 BMP 에 해당합니다. 브라우저에서 선택한 인코딩은 char 에서 사용하는 인코딩과는 상관없이 파일이 저장되는 방법에만 해당합니다. 마찬가지로 새 문자열에 인코딩을 지정하면 해당 문자열에만 코드가 적용되고 Java 의 char 은 컴파일러에서 죽었습니다. BMP 에 해당하거나 utf- 16 의 2 바이트 부분으로 간주될 수 있습니다.

따라서 ava 의 char 유형이 한자를 저장할 수 있는지 여부는 물론 가능하지만, BMP 부분만 대응할 수 있으며, 각종 번체자는 아무것도 할 수 없다.