|
인코딩이 필요한 이유는 무엇인가요?
컴퓨터에서 가장 작은 저장 단위는 바이트(byte)이며, 바이트는 문자의 수를 표현할 수 있고 1바이트 = 8비트, 바이트는 최대 255자까지만 표현할 수 있으며, 세계의 언어 등에는 다양한 문자가 있고, 문자를 표현하는 데 사용할 수 없기 때문에 인코딩 문제를 해결하기 위해 자바에서 문자를 표현할 때 사용하는 것이 문자(char)이며, 문자는 2바이트를 차지하므로 문자에서 바이트 사이의 최소 단위로 인코딩을 해야 하고, 반대로 디코딩도 문자에서 2바이트를 차지하므로 문자에서 바이트 사이의 가장 작은 단위로 인코딩을 해야만 한다. char는 2바이트를 차지하므로 인코딩의 경우 문자에서 바이트 사이의 가장 작은 단위까지 인코딩해야 하고, 디코딩의 경우 문자에서 바이트 사이의 가장 작은 단위까지 인코딩해야 합니다.
사실 인코딩과 디코딩은 번역 프로세스의 완성입니다 ("번역"은 이해하기 쉽습니다), 다양한 인코딩은 사전입니다.
1, ASCII 코드
모두 정보 교환을위한 미국 표준 코드, 정보 교환을위한 미국 표준 코드로 알려져 있으며, 주로 현대 영어 및 기타 서유럽 언어를 표시하는 데 사용되는 세계에서 가장 일반적인 단일 바이트 코딩 시스템입니다.
7비트로 표현되는 ASCII 코드는 128자만 표현할 수 있으며, 0~31자는 엔터, 백스페이스, 삭제 등의 제어 문자, 32~126자는 키보드를 통해 입력하고 표시할 수 있는 인쇄 문자, 0~9자는 48~57자는 키보드를 통해 입력하고 표시할 수 있는 문자로 구성됩니다.
이 중 0~9개의 아라비아 숫자 10개의 경우 48~57, 알파벳 대문자 26개의 경우 65~90, 알파벳 소문자 26개의 경우 97~122, 나머지는 일부 문장 부호, 산술 기호 등이며, 자세한 내용은 ASCII 표준 표를 참조하세요.
2, ISO-8859-1
이 코드는 ASCII 코드의 확장을 기반으로 하지만 여전히 총 256자에 불과한 단일 바이트 코드입니다.
ASCII는 128자만 표현할 수 있기 때문에 디스플레이를 완전히 표현할 수 없으므로 ISO-8859-1은 ASCII 코드 위에 서유럽 언어, 그리스어, 태국어, 아랍어, 히브리어에 해당하는 텍스트 기호를 추가하여 ASCII 코드와 하위 호환이 가능합니다.
3、GB2312
GB2312의 전체 이름은 "정보 기술 중국어 코드 문자 집합"으로 더블 바이트 인코딩이며 인코딩 범위는 A1-F7이며, 그 중 A1-A9는 총 682 개의 기호를 포함하는 기호 영역이고 B0-F7은 6,763 개의 한자를 포함하는 한자 영역입니다.
정식 명칭은 1980년 중국에서 발표한 정보 교환용 한자 코드 문자 집합으로 주로 컴퓨터 시스템에서 한자 처리에 사용되며, GB2312에는 주로 6,763개의 한자와 682개의 기호가 포함되어 있습니다.
GB2312는 한자 사용의 대부분을 다루지만 고대 중국어와 같은 특수 희귀 문자를 처리할 수 없기 때문에 GBK 및 GB18030과 같은 코드가 나중에 등장했습니다.
4、GBK
GBK의 전체 이름은 GB2312를 확장하기 위해 등장한 "중국어 문자 내부 코드 확장 사양"이며 인코딩 범위는 8140-FEFE (XX7F 제거), 총 23940 코드 포인트, 21003 개의 한자를 나타낼 수 있으며 인코딩은 GB2312와 호환됩니다!
중국 내부 코드 사양으로 알려진 GBK는 1995년에 개발되었습니다. 주로 GB2312에 더 많은 한자를 추가하여 확장한 것으로, 총 21003개의 한자를 포함합니다.
GBK는 GB2312와 역호환이 가능합니다. 즉, GB2312로 인코딩된 한자는 가비지 없이 GBK에서 정상적으로 디코딩할 수 있지만 GBK로 인코딩된 한자는 가비지 없이 GB2312에서 디코딩할 수 있습니다.
5、GB18030
한자 코드 확장 사양으로 알려진 GB18030은 2000년에 발표되어 2001년에 시행된 최신 내부 코드 문자 집합으로, 7만 개 이상의 한자를 포함하여 중국 소수 민족의 언어 문자 대부분을 포함하고 있습니다.
주로 싱글바이트, 더블바이트, 4바이트 문자 인코딩을 채택하고 있으며 GB2312 및 GBK와 역호환됩니다. 중국에서는 필수 표준이지만 실제 제작에는 거의 사용되지 않으며 가장 많이 사용되는 것은 GBK와 GB2312입니다.
6.유니코드
자신의 언어를 컴퓨터에 제대로 표시하기 위해 각 국가와 지역마다 고유 한 코드가 있으므로 서로의 코드를 모르는 코드가 많을수록 이번에는 ISO 조직이 글로벌 문화, 문자, 기호를 지원할 수 있도록 유니 코드 인코딩이라는 새로운 코드를 제시했습니다. 컴퓨터 용량 개발의 유니 코드는 더 이상 문제가되지 않으므로 고정 2 바이트의 디자인, 모든 문자는 16 비트로 표현되며 모든 문자는 16 비트로 표현됩니다. 이전에는 8 비트 만 차지했던 영어 문자를 포함하여 모든 문자가 16 비트로 표현되므로 공간 낭비를 초래할 수 있으며 유니 코드는 오랫동안 대중화되지 않았습니다.
7、UTF-16
UTF-16의 출현은 ISO가 새로운 슈퍼 언어 사전을 만들고 싶어한다는 것입니다. 세계의 모든 언어는이 사전을 통해 서로 번역 될 수 있으며,이 사전이 얼마나 복잡하고 거대한 지 상상할 수 있습니다. UTF-16은 2 바이트를 사용하여 유니 코드 변환 형식 (2 바이트는 16 비트이므로 UTF-16이 필요함), 고정 길이 표현을 사용합니다. 메서드, 즉 모든 문자를 2바이트로 표현할 수 있습니다. 이런 식으로 문자를 표현하는 것이 매우 편리합니다. 그러나 결함도 있습니다. 즉, 바이트가있는 문자의 대부분은 UTF-16으로 표현할 수 있지만 2 바이트로 저장 공간이 약간 낭비됩니다. 그래서 또 다른 인코딩 방법, 즉 UTF-8이 등장했습니다.
UTF-16은 유니 코드, 16, 즉 16 비트의 특정 구현이며, 그 이유 인 UTF-16은 컴퓨터에서 유니 코드 문자 저장을 정의하고, UTF-16은 또한 2 바이트를 사용하여 모든 문자를 표현하므로 문자 문자열의 연산이 매우 효율적이며, 이는 메모리에 저장되는 문자의 형식이 중요하기 때문에 자바 UTF-16입니다! 이것이 바로 자바가 메모리에 문자를 저장하는 형식으로 UTF-16을 사용하는 이유입니다.
UTF-16은 디스크와 메모리 간에 사용하기에 적합하며 문자와 바이트를 서로 변환하는 것이 더 간단하고 효율적이지만 네트워크 전송으로 인해 바이트 스트림이 손상될 수 있으므로 네트워크를 통한 전송에는 적합하지 않습니다.
8. UTF-8
UTF-8은 가변 길이 기술을 채택하고 각 인코딩 영역마다 문자 코드 길이가 다르며 다양한 유형의 문자를 1-6 바이트로 구성할 수 있습니다.
UTF-8의 인코딩 규칙은 다음과 같습니다:
1) 1바이트이고 가장 높은 비트가 0이면 1 ASCII 문자라는 뜻입니다. 모든 ASCII 코드는 이미 UTF-8임을 알 수 있습니다.
2) 1바이트이고 11로 시작하는 경우 연속된 1의 개수는 해당 문자의 바이트 수를 의미합니다(예: 110xxxxx는 더블바이트 UTF-8 문자의 첫 번째 바이트임을 의미).
3) 10으로 시작하는 1바이트인 경우 첫 번째 바이트가 아니므로 현재 문자의 첫 번째 바이트를 가져오려면 앞으로 검색해야 합니다.
UTF-16은 매우 효율적이지만 유니 코드의 가장 큰 단점은 모든 단일 바이트 문자가 2 바이트를 차지해야하므로 저장 공간이 2 배 확대되어 분명히 자원을 소비하고 인터넷의 급속한 발전의 현재 상황을 충족시키지 못한다는 것입니다. 따라서 유니 코드의 가변 길이 문자 인코딩 구현 인 UTF-8이 있으며, 1 ~ 6 개의 고정 길이 바이트를 사용하여 유니 코드 문자를 인코딩 할 수 있습니다.
UTF-8은 ASCII 문자에 단일 바이트 스토리지를 사용하며 단일 문자가 손상되어도 그 뒤에 오는 문자에는 영향을 미치지 않으므로 인터넷에서 기존 용도에 매우 적합하며 오늘날 가장 널리 사용되는 인코딩 중 하나입니다.
UTF-8은 한자를 표현하는 데 있어 GBK보다 효율적이고 UTF-16보다 덜 효율적이기 때문에 GBK 외에 가장 이상적인 인코딩 방식입니다. |
이전 기사:리눅스 메모리 버프/캐시 점유가 너무 큰 문제다음: 에셋 파일 "project.assets.json"을 찾을 수 없습니다. NuGet 패키지를 실행하여 복원 ...
|