저는 코딩을 크게 요구한 적이 없어서 유니코드와 UTF-8에 대해 잘 모릅니다. 최근에 우연히 UTF-8에 관한 기사를 읽었는데, 설명이 너무 복잡하다는 생각이 들어서 좀 더 간단하고 이해하기 쉬운 기사를 써야겠다고 생각했습니다.
먼저 오늘날 일반적으로 사용되는 인코딩 방식 중 일부를 설명하겠습니다.
1. 중국에서 가장 일반적으로 사용되는 인코딩은 GBK18030입니다. GBK와 GB2312 외에도 이러한 코드 간의 관계는 다음과 같습니다.
최초의 한자 인코딩은 GB2312였으며, 이 인코딩은 6763개의 한자와 682개의 기타 기호를 포함하여 1995년에 GBK1.0으로 명명되었습니다. 총 21886개의 기호가 있습니다. 나중에 총 27,484개의 중국어 문자와 티베트어, 몽골어, 위구르어 및 기타 주요 소수 민족 언어가 포함된 GBK18030 인코딩이 출시되었습니다. 이제 WINDOWS 플랫폼은 GBK18030 인코딩을 지원해야 합니다.
GBK18030, GBK, GB2312 순서에 따라 세 가지 인코딩이 하위 호환됩니다. 동일한 한자는 세 가지 인코딩 방식에서 동일한 인코딩을 갖습니다.
2. 대만, 홍콩 등에서는 BIG5 인코딩을 사용합니다
3. 일본: SJIS 인코딩
다양한 텍스트 인코딩을 다양한 곳의 방언으로 표현하면 유니코드 세계 각국이 공동으로 개발한 언어입니다.
이러한 언어 환경에서는 더 이상 언어 인코딩 충돌이 발생하지 않습니다. 이는 모든 언어의 콘텐츠를 동일한 화면에 표시할 수 있다는 점입니다.
그럼 유니코드는 어떻게 인코딩되나요? 사실 매우 간단합니다.
은 세상의 모든 텍스트를 2바이트를 사용하여 인코딩하는 것입니다. 2바이트는 최대 65536개의 코드를 나타낼 수 있습니다. 충분할까요?
한국과 일본의 한자는 대부분 중국에서 전래된 것이며 글자체도 똑같다. 예를 들어, "文"이라는 단어는 GBK와 SJIS에서 동일한 한자이지만 인코딩이 다릅니다. 그런 식으로 통일된 인코딩을 사용하면 전 세계 모든 언어의 대부분의 텍스트를 수용하는 데 2바이트이면 충분합니다.
유니코드의 학명은 "Universal Multiple-Octet Coded Character Set", 즉 UCS라고 합니다.
현재 사용되고 있는 것은 2바이트 인코딩인 UCS-2이며, UCS-4는 향후 2바이트로 부족해지는 것을 방지하기 위해 개발되었습니다. UCS-2는 기본 다국어 평면이라고도 합니다.
UCS-2를 UCS-4로 변환하는 것은 단순히 앞에 2바이트의 0을 추가하는 것입니다.
UCS-4는 주로 유니코드 4.0의 두 번째 보조 평면과 같은 보조 평면을 저장하는 데 사용됩니다.
20000-20FFF - 21000-21FFF - 22000-22FFF - 23000-23FFF - 24000-24FFF - 25000-25FFF - 26000-26FFF - 27000-27FFF - 28000-28FFF - 29000-29FFF - 2A000-2AFFF - 2F000-2FFFF
총 16개의 보조 플레인이 추가되어 원래 65536 코드에서 거의 100만 개의 코드로 확장되었습니다.
이제 인코딩이 통일됐는데, 어떻게 다양한 국가의 원본 텍스트 인코딩과 호환될 수 있을까요?
이때 코드페이지가 필요합니다.
코드페이지란 무엇인가요? 코드페이지는 각 국가의 텍스트 인코딩과 유니코드 간의 매핑 테이블입니다. 예를 들어 중국어 간체와 유니코드 간의 매핑 테이블은 CP936입니다.
다음은 일반적으로 사용되는 몇 가지 코드 페이지입니다. 위 주소의 번호를 적절하게 수정하세요.
codepage=936 중국어 간체 GBK
codepage=950 중국어 번체 BIG5
codepage = 437 미국/캐나다 영어
codepage=932 일본어
codepage=949 한국어
codepage=866 러시아어
codepage=65001 unicode UFT-8
마지막은 65001입니다. 개인적으로 이해하기 위해서는 단순한 가상 매핑 테이블이어야 하지만 실제로는 알고리즘일 뿐입니다.
936에서 임의의 줄을 선택하세요. 예:
0x9993 0x6ABD #CJK UNIFIED IDEOGRAPH
이전 인코딩은 GBK 인코딩이고 다음은 유니코드입니다.
이 표를 확인하면 GBK와 유니코드 간을 쉽게 변환할 수 있습니다.
이제 유니코드를 이해했으니 UTF-8이 무엇인가요? 그리고 왜 UTF-8이 나타나는 걸까요?
ASCII를 UCS-2로 변환하고 인코딩하기 전에 0x0을 삽입하면 됩니다. 이러한 인코딩을 사용하면 UNIX 및 일부 C 기능에서 심각한 오류를 일으키는 또는 /와 같은 일부 제어 문자가 포함됩니다. 따라서 UCS-2가 유니코드의 외부 인코딩으로 적합하지 않다는 것은 확실합니다.
그래서 UTF-8이 탄생했습니다. 그렇다면 UTF-8은 어떻게 인코딩됩니까? UCS-2 문제를 어떻게 해결하나요?
예:
E4 BD A0 11100100 10111101 10100000
"you"라는 단어를 UTF-8로 인코딩한 것입니다.
4F 60 01001111 0 110 0000
이것은 " "당신"의 유니코드 인코딩
은 UTF-8의 인코딩 규칙에 따라 다음과 같이 분해됩니다. xxxx0100 xx111101 xx100000
x를 제외한 숫자를 이어붙여 "당신"의 유니코드 인코딩이 됩니다. ".
UTF-8의 처음 세 개의 1에 주의하세요. 이는 전체 UTF-8 문자열이 3바이트로 구성되어 있음을 나타냅니다.
UTF-8 인코딩 후에는 가장 높은 비트가 항상 1이므로 민감한 문자가 더 이상 표시되지 않습니다.
Ce qui suit est la table de relation de conversion entre Unicode et UTF-8 :
U-00000000 - U-0000007F : 0xxxxxxx
U-00000080 - U-000007FF : 110xxxxx 10xxxxxx
U-00000800 - U -0000FFFF : 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF : 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF : 111110xx 10xxxxxx 10xxxxxx 10 xxxxxx 1 0xxxxxx
U-04000000 - U-7FFFFFFF : 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Convertissez l'encodage Unicode en UTF-8 Mettez simplement le flux d'octets Unicode dans x et il deviendra UTF-8.