다음 이전 차례

10. 소프트웨어를 어떻게 수정해야만 하는가?

UTF-8 지원을 위한 두 가지 접근 방법이 있다. 이것을 소프트 및 하드 변환이라 부르기로 하겠다. 소프트 변환에서 데이터는 UTF-8 형식으로 어디 서나 보존되며 단지 매우 적은 수의 소프트웨어만 변화시킬 필요가 있다. 하드 변환에서 프로그램이 읽어들이는 UTF-8 데이터는 폭이 큰(wide) 문자 배열로 변환 될 것이며, 또한 애플리케이션 내부의 어느 곳에서도 처리될 것이다.

대부분의 애플리케이션들은 단지 소프트 변환만으로도 잘 동작한다. 소프트 변환은 유닉스 상에서 UTF-8을 받아들일 수 있게 하는 것이다. 예를 들면, catecho와 같은 프로그램들은 전혀 수정할 필요가 없다. 그것들은 입출력이 ISO 8859-2 이든 UTF-8이든 상관없이 완벽하게 무시한다. 왜냐하면, 그것들은 입출력을 프로세스화하지 않고 단 지 바이트 스트림을 취급하기 때문이다. 그것들은 오직 UTF-8 상에서 어떠 한 변화도 일어나지 않는 '\n'과 같은 제어 코드와 ASCII 문 자만 인식한다. 그러므로 UTF-8 인코딩 및 디코딩은 터미널 에뮬레이터에서 동작하는 이러한 어플리케이션에 대해서 완벽하게 이루어진다.

바이트 수를 계산하여 한 문자열 안의 문자 수를 결정하는 모든 프로그 램을 위해서 약간의 수정이 필요할 것이다. UTF-8 모드에서, 프로그램들은 0x80부터 0xBF 범위 사이의 어떤 바이트 수도 계산해서는 안된다. 왜냐하면 이러한 바이트 수는 연속 바이트(continuation bytes)이며 소유하고 있는 문자는 아니기 때문이다. UTF-8과 함께 C언어의 strlen(s)함 수 또한 문자열 안의 문자수를 바르게 계산하지 않을 것이다. 그 대신, 만 약 UTF-8 로케일이 선택되었다면 문자수를 계산하기 위하여 mbstowcs (NULL,s,0) 함수를 사용할 수 있다.

예를 들어, ls 프로그램은 수정해야만 한다. 왜냐하면 그 것은 디렉토리를 유저에게 보여주기 위한 테이블의 레이아웃 체계를 갖추기 위해서 문자수를 파일명으로 계산하기 때문이다. 이와 유사하게 고정된 폭 을 갖는 폰트로 출력하고 그 출력을 포맷하는 프로그램들은 그것에 알맞게 UTF-8 텍스트 상의 문자 수를 계산하기 위한 방법을 알아야만 한다. 한 문 자를 지우는 것과 같은 에디터 함수는 한 문자에 속하는 모든 바이트를 지 우기 위해서 약간 수정해야만 한다. 예를 들면, ncurses 라이 브러리를 사용하는 프로그램 뿐만 아니라 viemacs와 같은 에디터 역시 이와 비슷한 영향을 받는다.

리눅스 커널 또한 소프트 변환만으로도 잘 동작할 수 있으며, UTF-8을 완벽하게 지원하기 위한 아주 약간의 수정만 필요하다. 문자열(예를 들어 파일명, 환경 변수 등)을 취급하는 대부분의 커널 함수들은 영향을 받지 않 는다. 다음과 같은 경우에 수정이 필요할 수 있다.


다음 이전 차례