UTF - 8 인 코딩 은 몇 바이트 입 니까?
3 개의 바이트: 기본적으로 GBK 와 같 고 21000 여 개의 한 자 를 포함한다.
4 바이트: 한 중 일 초대형 문자 집합 에 한자 5 만 여 개
하나의 utf 8 숫자 가 1 바이트 를 차지한다.
하나의 utf 8 영문 자모 가 1 바이트 를 차지한다.
소 수 는 한자 가 각각 3 개의 바이트 를 차지 하고 대부분 4 개의 바이트 를 차지한다.
3 바이트 의 범 위 를 차지 하 다
U+2E80 - U+2EF3 : 0xE2 0xBA 0x80 - 0xE2 0xBB 0xB3 115
U+2F00 - U+2FD5 : 0xE2 0xBC 0x80 - 0xE2 0xBF 0x95 213
U+3005 - U+3029 : 0xE3 0x80 0x85 - 0xE3 0x80 0xA9 36
U+3038 - U+4DB5 : 0xE3 0x80 0xB8 - 0xE4 0xB6 0xB5 7549
U+4E00 - U+FA6A : 0xE4 0xB8 0x80 - 0xEF 0xA9 0xAA 44138
U+FA70 - U+FAD9 : 0xEF 0xA9 0xB0 - 0xEF 0xAB 0x99 105
합계: 52156 개
4 바이트 범위 차지
U + 20000 - U + 2FA1D: 0xF 0 0xA 0 0x 80 0x 80 - 0xF 0 0xAF 0xA 8 0x9D 총 64029 개
합계: 64029 개
연장:
1960 년대 에 미국 은 문자 인 코딩 을 제정 하여 영어 문자 와 바 이 너 리 간 의 관 계 를 통일 적 으로 규정 했다.ASCII 코드 라 고 불 리 며 지금까지 사용 되 고 있다.
ASCII 코드 는 모두 128 글자 의 인 코딩 을 규정 하고 있 습 니 다. 예 를 들 어 빈 칸 인 'SPACE' 는 32 (바 이 너 리 00100000) 이 고 대문자 A 는 65 (바 이 너 리 01000001) 입 니 다.이 128 개의 기호 (인쇄 할 수 없 는 제어 기호 32 개 포함) 는 한 바이트 의 뒤쪽 7 자리 만 차지 하고 맨 앞의 1 자 리 는 0 으로 통일 되 어 있다.
2. 비 ASCII 인 코딩
영 어 는 128 개의 기호 로 인 코딩 하면 충분 하지만 다른 언어 를 나타 내 는 데 128 개의 기호 가 부족 하 다.예 를 들 어 프랑스어 에서 자모 위 에 주음 기호 가 있 으 면 ASCII 코드 로 표시 할 수 없다.그래서 일부 유럽 국가 들 은 바이트 에 남아 있 는 최고 위 치 를 이용 해 새로운 기 호 를 만 들 기로 했다.예 를 들 어 프랑스어 에 있 는 에 의 인 코딩 은 130 (2 진법 1000010) 이다.이렇게 되면 이들 유럽 국가 가 사용 하 는 인 코딩 체 계 는 최대 256 개의 기 호 를 나 타 낼 수 있다.
하지만 여기에 또 새로운 문제 가 생 겼 다.나라 마다 알파벳 이 다 르 기 때문에 256 개의 기 호 를 사용 하 더 라 도 대표 적 인 알파벳 은 다르다.예 를 들 어 130 은 프랑스어 인 코딩 에서 에 를 대표 하고 히 브 리 어 인 코딩 에서 알파벳 Gimel (ג),러시아어 인 코딩 에 서 는 또 다른 기 호 를 대표 합 니 다. 그러나 어쨌든 모든 인 코딩 방식 에서 0 – 127 이 표시 하 는 기 호 는 같 습 니 다. 다른 것 은 128 – 255 의 이 부분 입 니 다.
아시아 국가의 문자 에 대해 서 는 사용 하 는 기호 가 더 많아 졌 고 한 자 는 10 만 정도 에 달 했다. 한 바이트 에 256 개의 기호 만 표시 할 수 있 고 부족 할 것 이 므 로 반드시 여러 개의 바이트 로 하나의 기 호 를 표현 해 야 한다. 예 를 들 어 간 체 중국어 에서 흔히 볼 수 있 는 인 코딩 방식 은 GB 2312 로 두 개의 바이트 로 한 자 를 표시 하기 때문에 이론 적 으로 최대 256 x256 = 65536 개의 기 호 를 표시 할 수 있다.
중국어 인 코딩 문 제 는 전문 적 인 토론 이 필요 합 니 다. 이 노트 는 언급 되 지 않 습 니 다. 여러 바이트 로 하나의 기 호 를 표시 하지만 GB 류 의 한자 인 코딩 은 뒷글 의 유 니 코드 와 UTF - 8 과 는 무관 하 다 고 만 지적 합 니 다.
3.Unicode
지난 절 에서 말 했 듯 이 세계 에는 다양한 인 코딩 방식 이 존재 합 니 다. 같은 바 이 너 리 숫자 는 서로 다른 기호 로 해석 할 수 있 습 니 다. 따라서 텍스트 파일 을 열 려 면 인 코딩 방식 을 알 아야 합 니 다. 그렇지 않 으 면 잘못된 인 코딩 방식 으로 해석 하면 어 지 러 운 코드 가 발생 합 니 다. 왜 이메일 에 자주 어 지 러 운 코드 가 발생 합 니까? 발신 자 와 수신 자가 사용 하 는 편집 때 문 입 니 다.사이즈 가 달라 요.
하나의 인 코딩 이 있 으 면 세계 의 모든 기 호 를 포함 시 킬 것 이 라 고 상상 할 수 있 습 니 다. 모든 기호 가 하나 밖 에 없 는 인 코딩 을 해 주면 난 코드 문 제 는 사라 집 니 다. 이것 이 바로 유 니 코드 입 니 다. 이름 이 표시 하 는 것 처럼 모든 기호의 인 코딩 입 니 다.
유 니 코드 는 당연히 매우 큰 집합 이다. 현재 의 규 모 는 100 여 만 개의 기 호 를 수용 할 수 있다. 각 기호의 인 코딩 은 모두 다르다. 예 를 들 어 U + 0639 는 아라비아 자모 Ain 을 나타 내 고 U + 0041 은 영 어 를 나타 내 는 대문자 A 를 나타 내 며 U + 4E 25 는 한자 가 '엄격 하 다' 는 뜻 이다. 구체 적 인 기호 대응 표 는 유 니 코드. org 나 전문 적 인 한자 대응 표를 조회 할 수 있다.
예 를 들 어 한자 '엄' 의 유 니 코드 는 16 진수 4E 25 로 이 진수 로 무려 15 자리 (10011000100101) 로 바 뀌 었 다. 즉, 이 기 호 는 최소 2 개의 바이트 가 필요 하 다 는 것 이다. 다른 더 큰 기 호 를 나타 내 려 면 3 개의 바이트 나 4 개의 바이트, 심지어 더 필요 할 수도 있다.
여기 서 두 가지 심각 한 문제 가 있 습 니 다. 첫 번 째 문 제 는 유 니 코드 와 ASCII 를 어떻게 구별 할 수 있 습 니까? 컴퓨터 는 세 개의 바이트 가 하나의 기 호 를 표시 하 는 것 이 아니 라 세 개의 기 호 를 표시 하 는 것 을 어떻게 알 았 습 니까? 두 번 째 문 제 는 영어 자 모 는 한 글자 로 만 표시 하면 됩 니 다. 유 니 코드 가 통일 적 으로 규정 하면 각 기 호 는 세 개 또는 네 개의 바이트 로 표시 합 니 다.그러면 모든 영문 자모 앞 에 반드시 2 ~ 3 개의 바이트 가 0 이 어야 한다. 이것 은 저장 에 있어 매우 큰 낭비 이 고 텍스트 파일 의 크기 가 이 로 인해 2 ~ 3 배 클 것 이다. 이것 은 받 아들 일 수 없다.
이러한 결 과 는 다음 과 같다. 1) 유 니 코드 의 다양한 저장 방식 이 나 타 났 다. 즉, 유 니 코드 를 나타 내 는 다양한 바 이 너 리 형식 이 있다 는 것 이다. 2) 유 니 코드 는 인터넷 이 등장 할 때 까지 오 랜 시간 동안 홍보 할 수 없다.
5.UTF-8
인터넷 의 보급 은 하나의 통 일 된 인 코딩 방식 을 강력 히 요구한다. UTF - 8 은 인터넷 에서 가장 광범 위 하 게 사용 되 는 유 니 코드 의 실현 방식 이다. 다른 실현 방식 에는 UTF - 16 (문 자 는 두 바이트 또는 네 바이트 로 표시) 과 UTF - 32 (문 자 는 네 바이트 로 표시) 도 포함 된다.그러나 인터넷 에 서 는 거의 사용 되 지 않 습 니 다. 다시 한 번 말씀 드 리 지만 여기 서 의 관 계 는 UTF - 8 이 유 니 코드 의 실현 방식 중 하나 입 니 다.
UTF - 8 의 가장 큰 특징 은 길 어 지 는 인 코딩 방식 이다. 1 ~ 4 개의 바이트 로 하나의 기 호 를 표시 하고 기호 에 따라 바이트 의 길 이 를 바 꿀 수 있다.
UTF - 8 의 인 코딩 규칙 은 매우 간단 합 니 다. 두 가지 만 있 습 니 다.
1) 단일 바이트 의 기호 에 대해 서 는 바이트 의 첫 번 째 는 0 이 고, 뒤의 7 자 리 는 이 기호의 유 니 코드 코드 입 니 다. 따라서 영어 자모 에 대해 서 는 UTF - 8 인 코딩 과 ASCII 인 코딩 이 같 습 니 다.
2) n 바이트 의 기호 (n > 1) 에 대해 서 는 첫 번 째 바이트 의 앞 n 자 리 는 모두 1, n + 1 자 리 는 0 으로 설정 하고, 뒤의 바이트 의 앞 두 자 리 는 모두 10 으로 설정 합 니 다. 나머지 언급 되 지 않 은 바 이 너 리 는 모두 이 기호의 유 니 코드 코드 입 니 다.
다음 표 는 인 코딩 규칙 을 정리 하고 알파벳 x 는 인 코딩 가능 한 위 치 를 표시 합 니 다.
Unicode | UTF-8
( ) | ( )
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
위의 표 에 따 르 면 UTF - 8 인 코딩 을 해독 하 는 것 은 매우 간단 합 니 다. 한 바이트 의 첫 번 째 가 0 이면 이 바이트 가 단독으로 한 글자 입 니 다. 첫 번 째 가 1 이면 몇 개의 1 이 연속 되 어 있 는 지 는 현재 문자 가 몇 개의 바이트 를 차지 하 는 지 를 나타 냅 니 다.
다음은 한자 '엄' 을 예 로 들 어 UTF - 8 인 코딩 을 어떻게 구현 하 는 지 보 여 준다.
'엄격 함' 을 알 고 있 는 유 니 코드 는 4E 25 (10011000100101) 로 위의 표 에 따 르 면 4E 25 가 세 번 째 줄 의 범위 내 (0000 0800 - 0000 FFFF) 에 있 는 것 을 발견 할 수 있 기 때문에 '엄격 함' 의 UTF - 8 인 코딩 은 세 개의 바이트 가 필요 하 다. 즉, 형식 은 '1110 xxxx 10xxxxx 10xxxxx' 이다. 그리고 '엄격 함' 에서마지막 바 이 너 리 를 시작 으로 포맷 의 x, 더 많은 비트 0 을 뒤쪽 에서 앞으로 순서대로 입력 합 니 다. 이렇게 하면 '엄격 한' UTF - 8 인 코딩 은 '11100100 10111000 101001001' 이 고 16 진법 으로 전환 하면 E4B8A 5 입 니 다.
영국 작가 스 위 프 트 의 '걸 리 버 여행기' 에서 나 온 이름 이다. 이 책 에서 소인국 에서 내전 이 일 어 났 다. 전쟁의 원인 은 계란 을 먹 을 때 큰 머리 (Big - Endian) 에서 두 드 렸 는 지 작은 머리 (Little - Endian) 에서 두 드 렸 는 지 논쟁 이 일 어 났 다. 이 일 로 전후 여섯 차례 의 전쟁 이 벌 어 졌 고 한 황 제 는 목숨 을 잃 었 고 다른 황 제 는 왕 위 를 잃 었 다.
따라서 첫 번 째 바이트 가 앞 에 있 으 면 '큰 머리 방식' (Big endian) 이 고, 두 번 째 바이트 가 앞 에 있 으 면 '작은 머리 방식' (Little endian) 이다.
그러면 자 연 스 럽 게 문제 가 발생 할 것 이다. 컴퓨터 는 어떤 파일 이 도대체 어떤 방식 으로 인 코딩 을 하 는 지 어떻게 알 수 있 습 니까?
유 니 코드 규범 에 따 르 면 각 파일 의 맨 앞 에 인 코딩 순 서 를 나타 내 는 문 자 를 각각 추가 합 니 다. 이 문자 의 이름 은 '0 너비 비 줄 빈 칸' (ZERO WIDTH NO - BREAK SPACE) 이 고 FEFF 로 표시 합 니 다. 이것 은 바로 두 바이트 이 며 FF 는 FE 보다 1 큽 니 다.
만약 텍스트 파일 의 첫 두 바이트 가 FE FF 라면 이 파일 은 큰 머리 방식 을 사용 하고, 첫 두 바이트 가 FF FE 라면 이 파일 은 작은 머리 방식 을 사용 한 다 는 것 을 의미한다.
참고 문헌:
http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html
http://blog.csdn.net/chummyhe89/article/details/7777613
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
python 함수의 귀속함수는 코드의 봉인으로 다른 프로그램에 호출될 수도 있고 함수 내부에서 호출될 수도 있으며 함수 내부에서 자신을 호출하는 방식을 함수의 귀속이라고 부른다.마치 사람이 거울 앞에 서서 거울을 보는 것과 같다. 한 사람...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.