UTF - 8 인 코딩 은 몇 바이트 입 니까?

7214 단어 python 학습shell
2 개의 바이트 를 차지 하 는 것: 부가 기호 가 있 는 라틴어, 그리스 어, 키 릴 자모, 아르메니아 어, 히 브 리 어, 아랍 어, 시리아 어 와 그 자 모 를 가 지 려 면 두 개의 바이트 인 코딩 이 필요 하 다.
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 개
연장:
  • ASCII 코드
  • 컴퓨터 내부 에서 모든 정 보 는 최종 적 으로 바 이 너 리 문자열 로 표시 된다 는 것 을 잘 알 고 있 습 니 다.각 이 진 비트 (bit) 는 0 과 1 두 가지 상태 가 있 기 때문에 8 개의 이 진 비트 는 256 가지 상 태 를 조합 할 수 있 는데 이것 은 하나의 바이트 (byte) 라 고 불 린 다.즉, 하나의 바이트 가 모두 256 가지 서로 다른 상 태 를 나타 내 는 데 사용 할 수 있 고 모든 상태 가 하나의 기호 에 대응 하 는 것 은 256 개의 기호 로 000000 에서 11111111 까지 이다.
    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 입 니 다.
  • Little endian 과 Big endian
  • 유 니 코드 코드 는 UCS - 2 형식 으로 직접 저장 할 수 있다 고 지난 절 에 언급 된 바 있다. 한자 '엄 함' 의 경우 유 니 코드 코드 코드 는 4E 25 로 두 바이트 로 저장 해 야 하 는데 한 바이트 가 4E 이 고 다른 바이트 가 25 이다. 저장 할 때 4E 는 앞 에, 25 는 뒤에, 빅 엔 디 안 방식 이다. 25 는 앞 에, 4E 는 뒤에 리 틀 엔 디 안 방식 이다.
    영국 작가 스 위 프 트 의 '걸 리 버 여행기' 에서 나 온 이름 이다. 이 책 에서 소인국 에서 내전 이 일 어 났 다. 전쟁의 원인 은 계란 을 먹 을 때 큰 머리 (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

    좋은 웹페이지 즐겨찾기