>백엔드 개발 >PHP 튜토리얼 >다양한 PHP 인코딩 세트와 이를 사용해야 하는 상황에 대한 자세한 설명

다양한 PHP 인코딩 세트와 이를 사용해야 하는 상황에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-11-30 14:00:241047검색

문자 세트는 여러 유형의 문자 집합입니다. 각 문자 세트에는 서로 다른 문자 수가 포함됩니다. 일반적인 문자 세트 이름: ASCII 문자 세트, GB2312 문자 세트, GB 18030 문자 집합, 유니코드 문자 집합 등 컴퓨터가 다양한 문자 집합의 텍스트를 정확하게 처리하기 위해서는 컴퓨터가 다양한 텍스트를 인식하고 저장할 수 있도록 문자 인코딩이 필요합니다.

중국어는 문자 수가 많고 쓰기 규칙이 다른 두 문자로 나뉩니다. 중국어 간체와 중국어 번체 컴퓨터는 원래 영어 1바이트 문자를 기반으로 설계되었습니다. 중국어 정보 교환을 위한 기술적 기반입니다. 이 글에서는 몇 가지 대표적인 문자 집합을 문자 집합의 연대순으로 논의하고, 대표적인 한자 집합 몇 가지를 선정하여 역사적 기원과 특징, 기술적 특징을 연구한다.

ASCII 문자 집합

1. 이름의 유래

ASCII(American Standard Code for Information Interchange, American Standard Code for Information Interchange)는 로마 문자를 기반으로 한 집합입니다. 알파벳 컴퓨터 코딩 시스템.

2. 특징

주로 현대 영어와 기타 서유럽 언어를 표시하는데 사용됩니다. 이는 오늘날 가장 일반적인 단일 바이트 인코딩 시스템이며 국제 표준 ISO 646과 동일합니다.

3. 콘텐츠 포함

제어 문자: Enter 키, 백스페이스 키, 줄 바꿈 키 등

표시 가능한 문자 : 영문 대문자, 소문자, 아라비아 숫자, 서양 기호

4. 기술적 특징

7비트는 하나의 문자를 나타내며, 총 128개 문자

5. ASCII 확장 문자 집합

7비트 인코딩 문자 집합은 보다 일반적으로 사용되는 유럽 문자를 표현하기 위해 ASCII 확장되었습니다. 문자 집합은 8비트를 사용하여 문자를 나타내며, 총 256자를 나타냅니다.

ASCII 확장 문자 집합으로 확장된 기호에는 표 기호, 계산 기호, 그리스 문자 및 특수 라틴 기호가 포함됩니다.

GB2312 문자 집합

1. 이름의 유래

GB2312는 GB2312-80 문자 집합이라고도 하며, 전체 이름은 "한자 인코딩 문자 집합 정보"입니다. 교환·기본 세트"는 구 중국 국가 표준 관리국에서 발행하고 1981년 5월 1일에 시행되었습니다.

2. 특징

GB2312는 중국 국가표준의 간체자 집합입니다. 여기에 포함된 한자는 사용 빈도의 99.75%를 차지하며 기본적으로 한자의 컴퓨터 처리 요구를 충족합니다. 중국 본토와 싱가포르에서 널리 사용됩니다.

3. 포함된 내용

GB2312에는 간체자 및 일반 기호, 일련번호, 숫자, 라틴 문자, 일본어 가나, 그리스 문자, 러시아어 문자, 중국어 병음 기호 및 중국어 발음 문자가 포함됩니다. , 총 7445개의 그래픽 문자입니다. 여기에는 1급 한자 3755자, 2급 한자 3008자를 포함하여 6763자가 포함됩니다. 라틴 문자, 그리스 문자, 일본어 히라가나 및 가타카나 문자, 러시아어 키릴 문자를 포함하여 682자의 전자 문자가 포함됩니다.

4. 기술적 특징

(1) 파티션 표현:

GB2312에서는 수집된 한자가 "파티션"되어 있으며 각 영역에는 94개의 한자/기호가 포함되어 있습니다. 이 표현을 위치 코드라고도 합니다.

각 영역에 포함된 문자는 다음과 같습니다. 영역 01-09는 특수 기호입니다. 영역 16-55는 병음으로 정렬된 1급 한자입니다. 부수/획으로 정렬됨, 10 영역 -15 및 88-94는 코딩되지 않습니다.

(2) 더블바이트 표현

두 바이트 중 첫 번째 바이트가 첫 번째 바이트이고, 그 다음 바이트가 두 번째 바이트입니다. 첫 번째 바이트를 "상위 바이트"라고 부르고 두 번째 바이트를 "낮은 바이트"라고 부르는 것이 관례입니다.

"상위 바이트"는 0xA1-0xF7(01-87 지역 코드에 0xA0 추가)을 사용하고 "하위 바이트"는 0xA1-0xFE(0xA0에 01-94 추가)를 사용합니다.

5. 코딩 예

GB2312 문자 집합의 첫 번째 한자 "ah"를 예로 들어 보겠습니다. 지역 코드는 16이고 비트 번호는 01입니다. 지역 코드는 1601입니다. 대부분의 경우 지역 코드는 1601입니다. 컴퓨터 프로그램에서 상위 바이트와 하위 바이트에 각각 0xA0을 추가하여 프로그램의 한자 처리 코드 0xB0A1을 얻습니다. 계산 공식은 0xB0=0xA0+16, 0xA1=0xA0+1입니다.

BIG5 캐릭터 세트

1. 이름의 유래

Big Five 또는 Big Five라고도 불리며 1984년 대만정보산업진흥협회와 5개 소프트웨어 회사인 Acer, MiTAC, Jiajia, Zero One, FIC가 설립되어 Big Five라고 불립니다.

Big5 코드는 당시 대만의 여러 제조업체가 서로 호환되지 않는 Yitian 코드, IBM PS55, Wangan 코드 등과 같은 서로 다른 코드를 출시했기 때문에 만들어졌습니다. 대만 정부는 아직 공식 중국어 문자 인코딩을 출시하지 않았으며 중국 본토의 GB2312 인코딩에는 중국어 번체가 포함되어 있지 않습니다.

2. 특징

Big5 문자 집합에는 총 13,053개의 한자가 포함되어 있습니다. 이 문자 집합은 중국 대만에서 사용됩니다. 흥미로운 점은 이 문자 집합에 "兀"(0xA461 및 0xC94A), "?亍?0xDCD1 및 0xDDFC)라는 동일한 두 문자가 반복적으로 포함되어 있다는 점입니다.

3. 문자 인코딩 방법

Big5 코드는 2바이트를 사용하여 단어를 인코딩하는 2바이트 저장 방법을 사용합니다. 첫 번째 바이트를 "상위 바이트"라고 하고 두 번째 바이트를 "낮은 바이트"라고 합니다. 상위 바이트의 인코딩 범위는 0xA1-0xF9이고 하위 바이트의 인코딩 범위는 0x40-0x7E 및 0xA1-0xFE입니다.

각 인코딩 범위에 해당하는 문자 유형은 다음과 같습니다. 0xA140-0xA3BF는 문장 부호, 그리스 문자 및 특수 기호입니다. 또한 0xA259-0xA261은 2음절 두께 및 측정 단위에 대한 단어를 저장합니다. ????????杝??;0xA440-0xC67E는 일반적으로 사용되는 한자이며 먼저 획으로 정렬된 다음 부수로 정렬됩니다. 0xC940-0xF9D5는 다음으로 가장 일반적으로 사용되는 한자이며 먼저 획으로 정렬된 다음 부수로 정렬됩니다. .

4. Big5의 한계

Big5 코드는 10,000자가 넘는 문자를 포함하지만, 현재 유통되고 있는 인명, 지명, 방언, 화학, 생물학 등을 고려하지 않습니다. 사용되는 문자에는 일본어 히라가나와 가타카나가 포함되지 않습니다.

예를 들어 대만에서는 "Zhu"라는 단어가 "Zhu"의 변형으로 간주되어 "Zhu"라는 단어가 포함되지 않습니다. 강희사전의 일부 부수(예: "亠", "疒", "?", "?" 등), 일반 이름(예: "? Shake Bo ⅰ Ban Yin Bo ⅰ? 唷 Bo ⅰ? )입니다. Big5에 포함되지 않음

GB18030 문자 집합

1. 이름의 유래

GB 18030의 전체 이름은 GB18030-2000 "정보 교환용 한자"입니다. "인코드된 문자 집합의 기본 집합 확장"은 중국 정부가 2000년 3월 17일에 발표한 한자 인코딩에 대한 새로운 국가 표준입니다. 2001년 8월 31일 이후 중국 시장에 출시된 소프트웨어는 이 표준을 준수해야 합니다.

2. 특징

GB 18030 문자 집합 표준의 도입은 국내외 정보 기술 산업의 유명 기업, 정보 산업부 및 구 국가품질기술감독국
<.> GB 18030 문자 집합 표준은 한자, 일본어 가나, 한국어 및 중국어 소수 문자로 구성된 큰 문자 집합의 컴퓨터 인코딩 문제를 해결합니다. 이 표준의 인코딩 공간은 27484개의 중국어 문자를 포함하는 150만 코딩 비트를 초과합니다. 중국어, 일본어, 한국어 및 중국어 소수 문자는 동아시아 정보 교환을 위한 다중 언어, 큰 글꼴 크기, 다목적, 통합 인코딩 형식 요구 사항을 충족합니다. 중국 본토, 홍콩, 대만, 일본 및 한국과 호환되며 유니코드 버전 3.0과 호환되며 유니코드 확장 문자 어휘 "통일 한자 확장 A"의 내용을 채우고 이전 국가 문자 인코딩 표준( GB2312, GB13000.1)

 3. 인코딩 방식

 GB 18030. 표준에서는 1바이트, 2바이트, 4바이트의 세 가지 방식으로 문자를 인코딩합니다. 00 ~ 0×7F 코드(더블 바이트 부분의 해당 코드, 첫 번째 문자에 해당) 섹션 코드 범위는 0×81 ~ 0×FE이고 마지막 바이트 코드 비트는 0×40 ~ 0×7E입니다. 4바이트 부분은 각각 GB/T 11383에서 사용되지 않는 0×30 ~ 0×FE를 사용합니다. 0×39는 더블바이트 인코딩을 확장하는 접미사로 사용됩니다. 확장된 4바이트 인코딩 범위는 0×81308130에서 0×FE39FE39입니다. 첫 번째 및 세 번째 바이트 인코딩 코드 비트는 0×81에서 0입니다. ×FE, 두 번째 및 4바이트 인코딩 코드 비트는 0×30에서 0×39

4. 포함된 내용

2바이트 부분은 주로 GB13000을 포함합니다. 1 총 20,902개의 CJK 한자, 13개의 관련 구두점, 표의 문자, 80개의 보조 한자 및 부수/성분, 2바이트 인코딩된 유로 기호 등 4바이트 부분에는 위에서 언급한 2바이트 문자가 포함됩니다. 또한 CJK 통합 중국어 문자 확장 A

유니코드 문자 세트
1. 이름의 유래

유니코드 문자 집합 인코딩은 Universal Multiple-Octet Coded Character Set의 약자로, 한 기관에서 개발한 문자 인코딩 시스템입니다. 전 세계의 다양한 언어로 작성된 텍스트의 교환 및 표시를 지원하기 위해 유니코드 컨소시엄을 호출했습니다. 인코딩은 1990년에 개발되기 시작하여 1994년에 공식적으로 발표되었습니다. 최신 버전은 2005년 3월 31일 유니코드 4.1.0입니다.

2. 기능

유니코드는 컴퓨터에서 사용되는 문자 인코딩입니다. 언어 간 및 플랫폼 간 텍스트 변환 및 처리에 대한 요구 사항을 충족하기 위해 각 언어의 각 문자에 대해 통합되고 고유한 이진 인코딩을 설정합니다.

3. 인코딩 방법

유니코드 표준은 항상 16진수를 사용하며, 작성 시 "U+"라는 접두어가 붙습니다. 예를 들어 문자 "A"의 인코딩은 004116입니다. "?"의 인코딩은 20AC16입니다. 따라서 "A"의 인코딩은 "U+0041"로 작성됩니다.

 4.UTF-8 인코딩

 UTF-8은 유니코드를 사용하는 방법 중 하나입니다. UTF는 유니코드 변환 형식(Unicode Translation Format)으로, 유니코드를 특정 형식으로 변환하는 것을 의미합니다.

UTF-8은 네트워크를 통해 서로 다른 컴퓨터 간에 서로 다른 언어 및 인코딩으로 텍스트를 쉽게 전송할 수 있도록 하여 싱글바이트 처리를 처리하는 기존 시스템에서 더블바이트 유니코드를 올바르게 전송할 수 있도록 해줍니다.

UTF-8은 가변 길이 바이트를 사용하여 유니코드 문자를 저장합니다. 예를 들어 ASCII 문자는 계속 1바이트를 사용하여 저장하고, 악센트 문자, 그리스 문자 또는 키릴 문자는 2바이트를 사용하여 저장합니다. 일반적으로 사용되는 중국어 문자는 3바이트를 사용합니다. . 보조 평면 문자는 4바이트를 사용합니다.

5. UTF-16 및 UTF-32 인코딩

UTF-32, UTF-16 및 UTF-8은 UTF-16이 사용하는 유니코드 표준 인코딩 문자 집합의 문자 인코딩 방식입니다. a 또는 유니코드 코드 포인트를 인코딩하기 위한 두 개의 할당되지 않은 16비트 코드 단위 시퀀스는 각 유니코드 코드 포인트를 동일한 값의 32비트 정수로 나타냅니다.

다양한 PHP 애플리케이션의 잘못된 코드 문제에 대한 솔루션

1) 태그를 사용하여 페이지 인코딩 설정

이 태그의 기능은 클라이언트 브라우저를 인코딩하는 문자 세트를 선언하는 것입니다. 디스플레이 용도 이 페이지에서 xxx는 GB2312, GBK, UTF-8(MySQL과 다르며 UTF8임) 등이 될 수 있습니다. 따라서 대부분의 페이지에서는 이 방법을 사용하여 이 페이지를 표시할 때 사용할 인코딩을 브라우저에 알려 인코딩 오류와 문자 깨짐을 방지할 수 있습니다. 그러나 때로는 이 문장이 여전히 작동하지 않는 경우가 있습니다. xxx가 무엇이든 브라우저는 항상 동일한 인코딩을 사용합니다. 이에 대해서는 나중에 설명하겠습니다.

HTML 정보에 속하며 단지 서버가 HTML 정보를 브라우저에 전달했음을 나타내는 구문일 뿐이라는 점에 유의하세요.

 2) header("content-type:text/html; charset=xxx");

 이 함수 header()의 기능은 괄호 안의 정보를 http로 보내는 것입니다. 헤더. 괄호 안의 내용이 기사에서 언급한 내용이라면 기본적으로 라벨과 기능이 동일하다는 것을 첫 번째와 비교해 보면 문자가 유사한 것을 알 수 있습니다. 하지만 차이점은 이 기능이 있으면 브라우저는 항상 요청한 xxx 인코딩을 사용하고 절대 불순종하지 않으므로 이 기능은 매우 유용합니다. 왜 이런 일이 발생하는 걸까요? 그렇다면 http 헤더와 HTML 정보의 차이점에 대해 이야기해야 합니다.

http 헤더는 http 프로토콜을 사용하여 브라우저에 HTML 정보를 보내기 전에 서버에서 보내는 문자열입니다. 태그는 HTML 정보에 속하므로 header()가 보낸 내용이 브라우저에 먼저 도달합니다. 인기 있는 점은 header()가 더 높은 우선순위를 갖는다는 것입니다(이렇게 말할 수 있을지 모르겠습니다). PHP 페이지에 헤더("content-type:text/html;charset=xxx")와 헤더("content-type:text/html;charset=xxx")가 모두 있는 경우 브라우저는 이전 http 헤더만 인식하고 메타가 아닙니다. 물론 이 기능은 PHP 페이지 내에서만 사용할 수 있습니다.

전자는 확실히 작동하지만 후자는 가끔 작동하지 않는 이유는 무엇입니까? 이것이 다음으로 Apache에 대해 이야기하려는 이유입니다.

 3) AddDefaultCharset

 아파치 루트 디렉터리의 conf 폴더에는 전체 아파치 설정 문서인 httpd.conf가 있습니다.

텍스트 편집기를 사용하여 httpd.conf를 엽니다. 708행(버전에 따라 다를 수 있음)에는 AddDefaultCharset xxx가 포함되어 있습니다. 여기서 xxx는 인코딩 이름입니다. 이 코드 줄의 의미: 전체 서버에 있는 웹 페이지 파일의 http 헤더에 있는 문자 집합을 기본 xxx 문자 집합으로 설정합니다. 이 줄을 갖는 것은 각 파일에 헤더("content-type:text/html; charset=xxx") 줄을 추가하는 것과 같습니다. 이제 브라우저가 utf-8로 설정되어 있음에도 불구하고 항상 gb2312를 사용하는 이유를 이해할 수 있습니다.

웹 페이지에 헤더("content-type:text/html; charset=xxx")가 있는 경우 기본 문자 집합이 사용자가 설정한 문자 집합으로 변경되므로 이 기능은 항상 유지됩니다. 유용한. AddDefaultCharset xxx 앞에 "#"을 추가하고 이 문장을 주석 처리했는데 페이지에 헤더("content-type...")가 없으면 이제 메타 태그가 적용될 차례입니다.

위의 우선순위는 다음과 같습니다.

header("content-type:text/html; charset=xxx")

.. AddDefaultCharset xxx

 ..

  웹 프로그래머라면 각 페이지에 헤더("content-type: text/html; charset=xxx")를 추가하는 것이 좋습니다. 모든 서버가 올바르게 표시될 수 있고 이식성이 더 높은지 확인하십시오.

 4) php.ini의 Default_charset 구성:

 default_charset = "gb2312" php.ini는 php의 기본 언어 문자 집합을 정의합니다. 일반적으로 이 줄을 주석 처리하고 필수 요구 사항을 만드는 대신 웹 페이지 헤더의 문자 집합을 기반으로 브라우저가 자동으로 언어를 선택하도록 하는 것이 좋습니다. 이렇게 하면 동일한 서버에서 여러 언어의 웹 서비스를 제공할 수 있습니다. .

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