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

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

문자별 인코딩의 한계

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

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

(more…)

Continue reading