백엔드 개발 PHP 튜토리얼 ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

Aug 31, 2018 am 11:22 AM
ascii unicode utf-8

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 집합에 대해 얼마나 알고 있나요? 이 기사에서는 문자 세트 인코딩에 대한 철저한 이해를 제공합니다. 이 기사에서는 ASCII, 유니코드 및 UTF-8 인코딩 문제와 변환은 물론 예제 분석을 소개합니다. 기사 읽기 시작

1. ASCII 코드

우리는 컴퓨터 내부의 모든 정보가 궁극적으로 이진 값이라는 것을 알고 있습니다. 각 이진 비트(비트)는 0과 1의 두 가지 상태를 가지므로 8개의 이진 비트를 바이트라고 하는 256개의 상태로 결합할 수 있습니다. 즉, 1바이트는 총 256개의 서로 다른 상태를 표현할 수 있으며, 각 상태는 00000000부터 11111111까지 256개의 기호로 구성된 하나의 기호에 해당한다.

1960년대 미국은 영어 문자와 이진 비트 간의 관계를 통합하는 일련의 문자 인코딩을 공식화했습니다. 이것은 ASCII라고 불리며 오늘날에도 여전히 사용되고 있습니다.

ASCII 코드는 총 128개의 문자 인코딩을 지정합니다. 예를 들어 SPACE는 32(이진수 00100000)이고 대문자 A는 65(이진수 01000001)입니다. 이 128개 기호(인쇄할 수 없는 32개 제어 기호 포함)는 바이트의 마지막 7비트만 차지하며 첫 번째 비트는 균일하게 0으로 설정됩니다.

ASCII 제어 문자

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

ASCII 표시 가능 문자

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

2. 비ASCII 인코딩

128개 기호로 영어 인코딩이면 충분합니다. 하지만 다른 언어를 나타내는 데 사용됩니다. , 128개의 기호로는 충분하지 않습니다. 예를 들어 프랑스어에서는 문자 위에 발음 기호가 있으면 ASCII 코드로 표현할 수 없습니다. 결과적으로 일부 유럽 국가에서는 바이트의 유휴 최고 비트를 사용하여 새 기호를 인코딩하기로 결정했습니다. 예를 들어 프랑스어에서 é의 인코딩은 130(이진수 10000010)입니다. 결과적으로 이러한 유럽 국가에서 사용되는 인코딩 시스템은 최대 256개의 기호를 나타낼 수 있습니다.

그러나 여기서 새로운 문제가 발생합니다. 국가마다 알파벳이 다르므로 모두 256 기호 인코딩을 사용하더라도 나타내는 문자가 다릅니다. 예를 들어, 130은 프랑스어 인코딩에서 é를 나타내고, 히브리어 인코딩에서 문자 Gimel(ג)을 나타내고, 러시아어 인코딩에서는 또 다른 기호를 나타냅니다. 하지만 어찌 됐든 이 모든 인코딩 방법에서 0~127로 표시되는 기호는 동일하며 유일한 차이점은 섹션 128~255입니다.

아시아 국가의 문자는 기호가 더 많아 무려 10만 개의 한자가 사용됩니다. 1바이트는 256개의 기호만 표현할 수 있으므로 하나의 기호를 표현하려면 여러 바이트를 사용해야 합니다. 예를 들어, 중국어 간체의 일반적인 인코딩 방법은 GB2312이며, 이는 한자를 표현하기 위해 2바이트를 사용하므로 이론적으로 최대 256 x 256 = 65536개의 기호를 표현할 수 있습니다.

중국어 인코딩 문제를 논의하려면 특별한 기사가 필요하며 이 노트에서는 다루지 않습니다. 여기서는 기호를 표현하기 위해 여러 바이트가 사용되지만 GB 클래스의 한자 인코딩은 나중에 설명하는 유니코드 및 UTF-8과 아무 관련이 없다는 점만 지적합니다.

3. 유니코드

이전 섹션에서 언급했듯이 세상에는 다양한 인코딩 방법이 있으며 동일한 이진수라도 다른 기호로 해석될 수 있습니다. 따라서 텍스트 파일을 열려면 해당 인코딩 방법을 알아야 합니다. 그렇지 않으면 잘못된 인코딩 방법을 사용하여 해석하면 잘못된 문자가 나타납니다. 이메일이 종종 왜곡되는 이유는 무엇입니까? 이는 보내는 사람과 받는 사람이 서로 다른 인코딩 방법을 사용하기 때문입니다.

세상의 모든 기호를 포함하는 코드가 있다면 상상할 수 있습니다. 각 기호에는 고유한 코드가 부여되어 문자 깨짐 문제가 사라집니다. 이것은 이름에서 알 수 있듯이 모든 기호의 인코딩인 유니코드입니다.

유니코드는 물론 현재 1백만 개 이상의 기호를 수용할 수 있는 규모의 대규모 컬렉션입니다. 예를 들어, U+0639는 아랍어 문자 Ain을 나타내고, U+0041은 영어 대문자 A를 나타내고, U+4E25는 한자 Yan을 나타냅니다. 특정 기호 대응표에 대해서는 unicode.org 또는 전문 한자 대응표를 확인할 수 있습니다.

4. 유니코드 문제

유니코드는 단지 기호 집합일 뿐이며 이 이진 코드를 저장하는 방법은 지정하지 않습니다.

예를 들어 한자 Yan의 유니코드는 16진수 4E25이며, 이를 15자리의 이진수(100111000100101)로 변환합니다. 즉, 이 기호를 표현하려면 최소 2바이트가 필요합니다. 다른 더 큰 기호를 표현하려면 3바이트, 4바이트 또는 그 이상이 필요할 수 있습니다.

여기에는 두 가지 심각한 문제가 있습니다 첫 번째 질문은 유니코드와 ASCII를 구별하는 방법입니다. 3바이트가 3개의 개별 기호가 아닌 하나의 기호를 나타낸다는 것을 컴퓨터는 어떻게 알 수 있습니까? 두 번째 문제는 영어 문자를 표현하는 데 1바이트만 있으면 충분하다는 것을 이미 알고 있다는 것입니다. 유니코드에서 각 기호가 3~4바이트로 표현된다고 균일하게 규정하면 각 영어 문자 앞에는 2개의 문자가 와야 합니다. 이는 엄청난 저장 공간 낭비이고, 텍스트 파일의 크기도 2~3배 커지게 되어 용납할 수 없습니다.

이로 인해 발생하는 결과는 다음과 같습니다: 1) 유니코드의 여러 저장 방법이 등장했습니다. 이는 유니코드를 나타내는 데 사용할 수 있는 다양한 바이너리 형식이 있음을 의미합니다. 2) 유니코드는 인터넷이 등장하기 전까지 오랫동안 홍보될 수 없었습니다.

5. UTF-8

인터넷의 인기로 인해 통합 인코딩 방법의 출현이 절실히 필요합니다. UTF-8은 인터넷에서 가장 널리 사용되는 유니코드 구현입니다. 다른 구현에는 UTF-16(문자는 2바이트 또는 4바이트로 표시됨) 및 UTF-32(문자는 4바이트로 표시됨)가 포함되지만 인터넷에서는 거의 사용되지 않습니다. 여기서도 UTF-8은 유니코드의 구현이라는 점과 관련이 있습니다.

UTF-8의 가장 큰 특징 중 하나는 가변 길이 인코딩 방식이라는 점입니다. 기호를 표현하기 위해 1~4바이트를 사용할 수 있으며, 바이트 길이는 기호에 따라 다릅니다.

UTF-8 인코딩 규칙 은 매우 간단하며 다음 두 가지만 있습니다.

1 단일 바이트 기호의 경우 바이트의 첫 번째 비트는 0으로 설정되고 다음 7비트는 이 유니코드 코드입니다. 상징. 따라서 영문자의 경우 UTF-8 인코딩과 ASCII 인코딩이 동일합니다.

2 n바이트 기호(n > 1)의 경우 첫 번째 바이트의 처음 n 비트는 1로 설정되고 n + 1번째 비트는 0으로 설정되며 다음 바이트의 처음 2비트가 설정됩니다. 10으로. 언급되지 않은 나머지 이진 비트는 모두 이 기호의 유니코드 코드입니다.

다음 표에는 인코딩 규칙이 요약되어 있으며 문자 x는 사용 가능한 인코딩 비트를 나타냅니다.

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

위 표에 따르면 UTF-8 인코딩을 해석하는 것은 매우 간단합니다. 바이트의 첫 번째 비트가 0이면 해당 바이트만 문자입니다. 첫 번째 비트가 1이면 연속되는 1의 수는 현재 문자가 차지하는 바이트 수를 나타냅니다.

다음으로 UTF-8 인코딩을 구현하는 방법을 보여주기 위해 중국어 문자 Yan을 예로 들어보겠습니다.

Yan의 유니코드는 4E25(100111000100101)입니다. 위 표에 따르면 4E25는 세 번째 줄(0000 0800 - 0000 FFFF) 범위에 있으므로 Yan의 UTF-8 인코딩에는 3바이트가 필요합니다. , 형식은 1110xxxx 10xxxxxx 10xxxxxx입니다. 그런 다음 Yan의 마지막 이진수부터 시작하여 형식에 따라 x를 뒤에서 앞으로 채우고 나머지 비트는 0으로 채웁니다. 이러한 방식으로 Yan의 UTF-8 인코딩은 11100100 10111000 10100101이고 16진수로 변환된 것은 E4B8A5라는 것을 알 수 있습니다.

6. 유니코드와 UTF-8 간의 변환

이전 섹션의 예를 통해 Yan의 유니코드 코드는 4E25이고 UTF-8 인코딩은 E4B8A5라는 것을 알 수 있습니다. 이들 간의 변환은 프로그램을 통해 이루어질 수 있습니다.

Windows 플랫폼의 경우 가장 간단한 변환 방법 중 하나는 내장된 메모장 애플릿 notepad.exe를 사용하는 것입니다. 파일을 연 후 파일 메뉴에서 다른 이름으로 저장 명령을 클릭하면 하단에 코딩 드롭다운 바가 있는 대화상자가 나타납니다.

ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)

내부에는 ANSI, 유니코드, 유니코드 빅엔디안 및 UTF-8의 네 가지 옵션이 있습니다.

  • ANSI가 기본 인코딩입니다. 영어 파일의 경우 ASCII 인코딩, 중국어 간체 파일의 경우 GB2312 인코딩입니다(Windows 중국어 간체 버전만 해당, 중국어 번체 버전인 경우 Big5 코드 사용).

  • 여기서 유니코드 인코딩은 notepad.exe에서 사용하는 UCS-2 인코딩 방법을 의미하며, 2바이트를 직접 사용하여 문자의 유니코드 코드를 저장합니다. 이 옵션은 리틀 엔디안 형식을 사용합니다.

  • 유니코드 빅엔디안 인코딩은 이전 옵션에 해당합니다. 리틀 엔디안과 빅 엔디안의 의미에 대해서는 다음 장에서 설명하겠습니다.

  • UTF-8 인코딩은 이전 섹션에서 언급한 인코딩 방법입니다.

"인코딩 방법"을 선택한 후 "저장" 버튼을 클릭하면 파일의 인코딩 방법이 즉시 변환됩니다.

Seven, Little endian 및 Big endian

이전 섹션에서 언급했듯이 UCS-2 형식은 유니코드 코드를 저장할 수 있습니다(코드 포인트는 0xFFFF를 초과하지 않음). 중국 문자 Yan을 예로 들면 유니코드 코드는 4E25이고 2바이트로 저장되어야 하며, 한 바이트는 4E이고 다른 바이트는 25입니다. 보관할 때 4E가 앞쪽에 있고 25가 뒤쪽에 있는 빅 엔디안 방식이며, 25가 앞쪽에 있고 4E가 뒤쪽에 있는 리틀 엔디안 방식입니다.

이 두 가지 이상한 이름은 영국 작가 스위프트의 "걸리버 여행기"에서 따왔습니다. 책에서는 릴리푸트에서 내전이 발발했는데, 전쟁의 원인은 빅엔디안인지 리틀엔디안인지를 두고 사람들이 벌이는 논쟁이었다. 이 사건으로 인해 6번의 전쟁이 발발하여 한 황제가 목숨을 잃었고, 또 다른 황제가 왕좌를 잃었습니다.

첫 번째 바이트인 "빅 엔디안"이 먼저 오고, 두 번째 바이트인 "리틀 엔디안"이 먼저 옵니다.

그러면 자연스럽게 다음과 같은 질문이 생길 것입니다. 컴퓨터는 특정 파일에 어떤 인코딩 방법이 사용되는지 어떻게 알 수 있을까요?

유니코드 사양에서는 인코딩 순서를 나타내는 문자가 각 파일의 앞에 추가된다고 정의합니다. 이 문자의 이름은 FEFF로 표시되는 "제로 너비 중단 없음 공백"(제로 너비 중단 없음 공백)입니다. 이는 정확히 2바이트이고 FF는 FE보다 1바이트 더 큽니다.

텍스트 파일의 처음 2바이트가 FE FF이면 파일이 빅엔디안 모드를 사용한다는 의미이고, 처음 2바이트가 FF FE이면 파일이 스몰엔디안 모드를 사용한다는 의미입니다.

8. 예시

아래에 예시를 들어보세요.

"메모장" 프로그램인 notepad.exe를 열고 새 텍스트 파일을 만듭니다. 내용은 "yan"이라는 단어로, ANSI, 유니코드, 유니코드 빅 엔디안 및 UTF-8 인코딩으로 저장합니다.

그런 다음 텍스트 편집 소프트웨어 UltraEdit의 "Hex Function"을 사용하여 파일의 내부 인코딩을 관찰하세요.

  • ANSI: 파일 인코딩은 Yan의 GB2312 인코딩인 2바이트 D1 CF입니다. 이는 GB2312가 빅 헤드 모드에 저장되어 있음을 의미합니다.

  • 유니코드: 인코딩은 4바이트 FF FE 25 4E입니다. 여기서 FF FE는 작은 헤더 모드에 저장되었음을 나타내며 실제 인코딩은 4E25입니다.

  • 유니코드 빅 엔디안: 인코딩은 4바이트 FE FF 4E 25입니다. 여기서 FE FF는 빅 엔드 스토리지를 나타냅니다.

  • UTF-8: 인코딩은 6바이트 EF BB BF E4 B8 A5입니다. 처음 3바이트 EF BB BF는 이것이 UTF-8 인코딩임을 나타내고 마지막 3바이트 E4B8A5는 해당 저장 순서입니다. 인코딩 순서와 일치합니다.

9. 확장 읽기(과외 지식)

모든 소프트웨어 개발자가 반드시, 적극적으로 알아야 하는 유니코드 및 문자 집합에 대해 알아야 할 최소값(문자 집합에 대한 가장 기본적인 지식)

유니코드 인코딩에 대해 이야기해 보세요. RFC3629: UTF-8, ISO 10646의 변환 형식(UTF-8 조항이 구현된 경우)

위 내용은 ASCII, 유니코드 및 UTF-8을 인코딩하는 문자 세트에 대해 얼마나 알고 계십니까? 문자 세트 인코딩 요약(컬렉션)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

하나의 ASCII 문자가 몇 바이트를 차지합니까? 하나의 ASCII 문자가 몇 바이트를 차지합니까? Mar 09, 2023 pm 03:49 PM

하나의 ASCII 문자는 1바이트를 차지합니다. ASCII 코드 문자는 컴퓨터에서 7비트 또는 8비트 바이너리 인코딩으로 표현되며 1바이트로 저장됩니다. 즉, 하나의 ASCII 코드가 1바이트를 차지합니다. ASCII 코드는 표준 ASCII 코드와 확장 ASCII 코드로 나눌 수 있습니다. 표준 ASCII 코드는 7비트 이진수(나머지 1개의 이진수는 0)를 사용하여 대문자와 소문자를 모두 나타냅니다. 숫자 0~9. 미국 영어에 사용되는 구두점 및 특수 제어 문자입니다.

PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 PHP에 대한 심층적인 이해: JSON 유니코드를 중국어로 변환하는 구현 방법 Mar 05, 2024 pm 02:48 PM

PHP에 대한 심층적인 이해: JSONUnicode를 중국어로 변환하는 구현 방법 개발 중에 JSON 데이터를 처리해야 하는 상황이 자주 발생하며, JSON의 유니코드 인코딩은 일부 시나리오, 특히 변환해야 할 때 몇 가지 문제를 일으킬 수 있습니다. 유니코드 인코딩을 한자로 변환하는 경우입니다. PHP에는 이러한 변환 프로세스를 달성하는 데 도움이 되는 몇 가지 방법이 아래에 소개되고 구체적인 코드 예제가 제공됩니다. 먼저 JSON의 Un을 먼저 이해해 봅시다.

PHP의 ASCII 값 변환에 대해 빠르게 알아보기 PHP의 ASCII 값 변환에 대해 빠르게 알아보기 Mar 28, 2024 pm 06:42 PM

PHP의 ASCII 값 변환은 프로그래밍에서 자주 발생하는 문제입니다. ASCII(American Standard Code for Information Interchange)는 문자를 숫자로 변환하는 표준 인코딩 시스템입니다. PHP에서는 ASCII 코드를 통해 문자와 숫자를 변환해야 하는 경우가 많습니다. 이 기사에서는 PHP에서 ASCII 값을 변환하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 캐릭터 변경

유니코드를 중국어로 변환하는 방법 유니코드를 중국어로 변환하는 방법 Dec 14, 2023 am 10:57 AM

유니코드는 다양한 언어와 기호를 표현하는 데 사용되는 문자 인코딩 표준입니다. 유니코드 인코딩을 중국어 문자로 변환하려면 Python의 내장 함수 chr() 및 ord()를 사용할 수 있습니다.

Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Eclipse에서 한자 깨짐 문제를 해결하는 방법을 시도해 보세요. Jan 03, 2024 pm 05:28 PM

Eclipse에서 중국어 문자가 깨져서 고민이신가요? 이러한 솔루션을 시도하려면 구체적인 코드 예제가 필요합니다. 1. 배경 소개 컴퓨터 기술이 지속적으로 발전함에 따라 소프트웨어 개발에서 중국어의 역할이 점점 더 중요해지고 있습니다. 그러나 많은 개발자는 중국어 개발에 Eclipse를 사용할 때 잘못된 코드 문제에 직면하여 작업 효율성에 영향을 미칩니다. 그런 다음 이 기사에서는 몇 가지 일반적인 잘못된 코드 문제를 소개하고 독자가 Eclipse에서 중국어 잘못된 코드 문제를 해결하는 데 도움이 되는 해당 솔루션과 코드 예제를 제공합니다. 2. 일반적인 잘못된 코드 문제 및 솔루션 파일

PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 PHP 튜토리얼: JSON 유니코드를 한자로 변환하는 방법 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)은 웹 애플리케이션 간의 데이터 교환에 일반적으로 사용되는 경량 데이터 교환 형식입니다. JSON 데이터를 처리할 때 유니코드로 인코딩된 중국어 문자(예: "u4e2du6587")를 자주 접하고 이를 읽을 수 있는 중국어 문자로 변환해야 합니다. PHP에서는 몇 가지 간단한 방법을 통해 이러한 변환을 수행할 수 있습니다. 다음으로 JSONUnico 변환 방법을 자세히 소개하겠습니다.

PHP는 문자열의 첫 번째 문자의 ASCII 값을 반환합니다. PHP는 문자열의 첫 번째 문자의 ASCII 값을 반환합니다. Mar 21, 2024 am 11:01 AM

이 글에서는 PHP가 반환하는 문자열의 첫 번째 문자의 ASCII 값에 대해 자세히 설명할 것입니다. 편집자는 이것이 매우 실용적이라고 생각하므로 이 글을 읽으신 후 뭔가를 얻으실 수 있기를 바랍니다. PHP는 문자열의 첫 번째 문자에 대한 ASCII 값을 반환합니다. 소개 PHP에서 문자열의 첫 번째 문자에 대한 ASCII 값을 얻는 것은 문자열 처리 및 문자 인코딩에 대한 기본 지식이 필요한 일반적인 작업입니다. ASCII 값은 컴퓨터 시스템에서 문자의 숫자 값을 나타내는 데 사용되며 문자 비교, 데이터 전송 및 저장에 중요합니다. 문자열의 첫 번째 문자에 대한 ASCII 값을 가져오는 프로세스에는 다음 단계가 포함됩니다. 문자열 가져오기: ASCII 값을 가져오려는 문자열을 결정합니다. 변수 또는 문자열 상수일 수 있습니다.

Java가 MySQL 데이터베이스에 연결할 때 일관되지 않은 유니코드 문자 집합 인코딩 문제를 해결합니다. Java가 MySQL 데이터베이스에 연결할 때 일관되지 않은 유니코드 문자 집합 인코딩 문제를 해결합니다. Jun 10, 2023 am 11:39 AM

빅데이터, 클라우드 컴퓨팅 등 기술의 발전으로 데이터베이스는 기업 정보화의 중요한 초석 중 하나가 되었습니다. Java로 개발된 애플리케이션에서는 MySQL 데이터베이스에 연결하는 것이 표준이 되었습니다. 그러나 이 과정에서 유니코드 문자 세트 인코딩이 일치하지 않는다는 까다로운 문제에 자주 직면합니다. 이는 개발 효율성에 영향을 미칠 뿐만 아니라 애플리케이션의 성능과 안정성에도 영향을 미칩니다. 이 기사에서는 이 문제를 해결하고 Java가 MySQL 데이터베이스에 보다 원활하게 연결되도록 하는 방법을 소개합니다. 1. 유니코드

See all articles