Backends PHP

웹개발자를 위한 문자 인코딩 기초 #8 – UTF-8

ASCII와의 호환성을 확보한 UTF-8

이전 편에서 소개한 UTF-16은 서러게이트를 활용한 방법으로 문자열이 잘못되었을 때 쉽게 파악할 수 있으면서도, 동시에 기본 다국어 평면 안의 문자를 2바이트 만으로 표현할 수 있는 효율성도 갖추었습니다. 그러나 UTF-16에는 아쉬운 부분이 바로 ASCII와의 호환성입니다.

ASCII에는 전통적으로 전산처리에서 특별한 기능을 하는 문자들이 있습니다. 이를테면 C언어를 비롯해 많은 언어에서 문자열이 끝났음을 의미하는 NULL 문자(U+0000), 줄바꿈에 사용되는 개행문자(U+000A), 띄어쓰기 등에 사용하는 공백문자(U+0020) 등이 그것입니다. 그런데 UTF-16에서는 문자 중간에 이들 문자의 ASCII 값이 섞여 들어가는 일이 발생합니다.

(more…)

Continue reading

Backends PHP

웹개발자를 위한 문자 인코딩 기초 #7 – UTF-16

기본 다국어 평면과 그 외의 문자에 다른 규칙을 적용한 UTF-16

UTF-32은 유니코드 값을 그대로 32비트로 옮겨서 만든 인코딩으로, 심플하다는 장점에도 불구하고 몇 가지의 단점이 있었습니다. UTF-16는 특별한 규칙들을 통해 유니코드의 값을 변형하여 이 문제들을 해결한 인코딩입니다. UTF-16 인코딩의 규칙은 크게 기본 다국어 평면에 속하는 문자와, 그렇지 않은 문자들로 구분됩니다.

(more…)

Continue reading

Backends PHP

웹개발자를 위한 문자 인코딩 기초 #6 – UTF-32 (UCS-4)

유니코드의 값을 그대로 사용한 UTF-32

앞서 살펴본 UCS-2는 기본 다국어 평면 만을 이용하여 2바이트로 깔끔하게 떨어지는 인코딩 방식을 만들어냈지만, 나머지 평면을 표시할 수 없는 문제가 있었습니다. UTF-32는 이와 정확하게 반대의 방법으로 만들어진 인코딩입니다. UTF-32는 유니코드의 모든 문자를 표현할 수 있도록 한 글자당 32비트를 사용하는 인코딩입니다.

UTF-32는 유니코드를 알고 있는 사람들은 무척 심플하다고 생각할 수 있는 규칙을 가지고 있습니다. UTF-32에서 앞의 2바이트는 [0x00 0x00]부터 [0x00 0x10]까지 몇 번째 평면인가를 표시합니다. 또한 뒤의 2바이트는 UCS-2가 그랬던 것처럼 해당 평면의 어느 문자인지를 나타냅니다.

(more…)

Continue reading

Backends PHP

웹개발자를 위한 문자 인코딩 기초 #5 – UCS-2와 HTML Entity Number

기본 다국어 평면 만을 과감하게 선택한 UCS-2 방식

앞서 살펴보았던 유니코드의 문제점을 해결하기 위한 가장 간단한 방법은 무엇일까요. 다름 아닌 쾌도난마(快刀亂麻), 평면을 표시하기 위한 숫자가 거슬린다면 과감하게 그것을 잘라내는 것도 하나의 방법이겠지요.

UCS-2 방식이 바로 이 방법을 사용한 인코딩입니다. UCS는 국제 문자세트(Universal Character Set)의 줄임말입니다. 한편 숫자 2는 이 인코딩이 2바이트로 이루어져 있다고 하는 것을 의미합니다. UCS-2는 유니코드의 다른 모든 평면을 포기하고, 오로지 0번 기본 다국어 평면 만을 선택합니다. 사실 우리 시대에 전세계에서 사용하고 있는 거의 모든 문자는 기본 다국어 평면에 들어있으니, 일견 타당한 방법이기도 합니다.

UCS-2의 인코딩의 16진수 값들은 유니코드 기본 다국어 평면과도 완벽하게 같습니다. 유니코드에서 16진수 0xAC00로 정해진 한글 “가”는, UCS-2에서도 동일하게 [0xAC 0x00]에 배정되어 있습니다. 이렇게 유니코드에서 평면을 나타내는 숫자를 떼어버리고 나니, 1글자의 크기가 딱 2바이트로 깔끔하게 떨어지는 것도 장점입니다.

(more…)

Continue reading

Backends PHP

웹개발자를 위한 문자 인코딩 기초 #4 – 유니코드

문자별 인코딩의 한계

앞서 소개한 EUC-KR과 그 확장판인 CP949는 오직 한글 만을 위하여 만들어진 인코딩이었습니다. 그러나 컴퓨터를 사용하는 국가는 한국 만이 아닐 것입니다. 일본에서도 중국에서도, 우즈베키스탄과 인도에서도 컴퓨터는 사용되니, 그곳 문자들을 표시할 수 있는 인코딩이 매번 필요했을 것입니다.

이것은 각국의 문자 인코딩이 통일되지 못한 규칙을 가지고 만들어지는 결과를 낳았습니다. 문제는 이러한 인코딩으로 작성된 문서를 다른 인코딩으로 열어보면 읽을 수가 없다는 것입니다. 이를테면 EUC-KR 인코딩으로 “小數”라고 작성하고 저장한 텍스트 파일을, 일본에서 가장 널리쓰이는 인코딩 중 하나인 Shift-JIS로 열어보면 “盖筥”라는 전혀 다른 글자가 표시됩니다.

(more…)

Continue reading