Unicode Howto for KDE developers

What's Unicode?

전세계의 모든 문자들과 심볼들을 표현할수 있다. 현재 지정된 코드는 16비트 정수 범위이다. 첫번째 256 코드는 Latin-1으로 같은 문자들을 제공한다. 좀더 상세한 것은 http://www.unicode.org/.를 참조하라.

Why use Unicode?

만약 로컬 8비트 문자셋을 사용하고 있다면, 단지 하나의 언어로된 문서만을 만들수 있고, 또한 같은 문자세을 사용하는 사람들끼리만 문서를 교환할수 있다. 유니코드는 문서내에 여러 언어를 쓰고 다른 지역의 사람들끼리 문서를 교환할수 있는 현명한 방법이다. 유니코드를 사용하지 않고는 단순한 러시아-헝가리 사전을 쉽게 작성할수 없다.

What means UTF-8 and UTF-16?

UTF는 Unicode Transfer Format를 의미한다. 비트내에서 유니코드 문자들을 표시하는 방법에 대해 정의한다. UTF-16은 유니코드 숫자로써 16비트 값으로써 모든 문자들을 표시하는 것을 의미한다. 예를들면, UTF-16내의 Latin-1 문자들은 Latin-1내의 nn번째 Hex표시는 00nn의 HEX표시를 가진다. 0에서 127까지의 값들에 대한 바이트는 ASCII 문자들에 대해 호환된다. 다른 문자들은 하나의 바이트이상으로써 표시된다. 왜냐하면 "\0"와 "/"문자들은 UTF-8내의 멀티 바이트로 표시할수 없다. 널 문자로 끝나는 C 문자열로써 문자열을 다룰수 있다.

관심이 있다면, 유니코드 문자 코드들이 UTF-8 바이트에 저장하는 방법에 대한 간단한 예제가 여기에 있다 :

 bytes | bits | representation
     1 |    7 | 0vvvvvvv
     2 |   11 | 110vvvvv 10vvvvvv
     3 |   16 | 1110vvvv 10vvvvvv 10vvvvvv
     4 |   21 | 11110vvv 10vvvvvv 10vvvvvv 10vvvvvv

What's the Unicode marker?

유니코드 파일들은 시작시 두개의 HEX 바이트 FEFF로써 표시된다. 이 표시는 파일내의 byteorder를 표시한다. FFFE로 파일을 시작하는 것은 다른 byte order의 기계상에서 생성된 유니코드 파일이다.

How to support Unicode in KDE applications?

모든 KDE2 응용 프로그램이 다루는 문서는 지역 문자셋을 지원하며, 두번째 선택으로 유니코드를 지원한다. 즉, 응용 프로그램 사용자는 기본적으로 지역 문자셋으로써 문서를 저장하고 읽을수 있고, 옵션으로 유니코드를 사용할수 있다. UTF-8과 UTF-16둘다 지원된다. 유럽 사용자들은 UTf-8을 제안하고, 아시아 사용자들은 UTF-16을 제안한다.

Where can I get sample Unicode files?

kde-i18n 패킷지를 가지고, 유니코드로 변환한다.
recode KOI8-R..UTF-8      ru/messages/kdelibs.po
recode ISO-8859-1..UTF-16 de/messages/kdelibs.po
recode ISO-8859-3..UTF-8  eo/messages/kdelibs.po

Where can I get Unicode fonts?

로부터 xfsft를 받고, http://www.microsoft.com에서 TrueType폰트드를 찾거나 윈도우 인스톨 디렉토리로부터 TrueType Font를 가져오고 사용할수 있게 폰트를 인스톨한다.

나의 fonts.scale파일의 일부이다 :

verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-iso10646-1
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-iso8859-1
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-iso8859-2
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-iso8859-3
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-iso8859-5
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-koi8-r
verdana.ttf -microsoft-verdana-medium-r-normal--0-0-0-0-p-0-koi8-u       
...

How the user will put Unicode chars into a widget

동일한 UTF-8기반의 입력 방법으로서 전체 유니코드 범위내에 문자를 입력을 원하는 사용자에 대한 확실한 해결책은 utf8을 사용하는 것이다.

이 작업은 지금의 KDE에는 매우 잘 되어 있지 않다. 몇개의 문제점들은 KDE 2.0이 배포되기 전에 해결될 것이다. 몇몇 특별한 문자들을 입력하기 위한 임시적인 해결책은 kdeutils/kcharselect이다. 그러나 이것은 큰 문서들에 대해서는 확실하지 않다.

How to implement Unicode in my KDE application?

QT 2.0 클래스나 KDE클래스 기반으로 사용하는 한, QT의 문서 코덱을 사용함으로써 유니코드를 간단히 지원한다. 때때로 필요한 작업에 대해서는 간단한 아래의 코드를 참조하라.

What about QString and QCString?

QString 클래스 내부적으로 16비트 값으로써 모든 문자를 표시한다. QTextStream또는 QCString으로써 8비트 문서에대대해 일거나 문서일부를 읽는다면 16비트 표시하거나 문서를 변환하기 위해 QTextCodec을 사용해야 한다. 문자열의 끝으로써 null 바이트를 가지기 때문에 QCString내의 UTF-16 인코딩된 문자열을 유지할수 없다. 그러나 일반적으로 UTF-16문자열내의 null바이트는 있다. ( 모든 Latin-1은 Latin-1코드와 null바이트로 동일하게 구성된다. ) 일반적으로 QCString과 QString사이에 유니코드를 변환하기 위해 UTf-8 코덱을 사용한다.

How to get a codec for Unicode?

QTextCodec utf8_codec  = QTextCodec::codecForName("utf-8");
QTextCodec utf16_codec = QTextCodec::codecForName("utf-16");

How to read Unicode from a text file?

QTextStream textStream;
QString line;

// UTF-16, if the file begins with a Unicode mark
// the default is ok, otherwise:
// textStream.setEncoding(QTextStream::Unicode);
line = textStream.readLine();
...

// UTF-8
textStream.setCodec(utf8_codec);
line = textStream.readLine();
...

How to write Unicode to a text file?

QTextStream textStream;
QString line;

// UTF-16
textStream.setEncoding(QTextStream::Unicode);
textStream << line;
...

// UTF-8
textStream.setCodec(utf8_codec);
textStream << line;
...

How to read Unicode from a buffer?

char * buffer;

// UTF-16
QString string = utf16_codec->toUnicode(buffer);

// UTF-8
QString string = utf8_codec->toUnicode(buffer);

How to write Unicode to a buffer?

버퍼내의 미처리된 유니코드 데이터를 매우 조심해야 한다. 왜냐하면 하나의 0 바이트는 문자열의 끝이 아니기 때문이다. 유니코드 데이터를 다루기 위한 최고의 방법은 QString과 QChar클래스이다.
// UTF-16
QString string; // my Unicode text
QByteArray array;
QTextStream textStream(array,IO_WriteOnly);

textStream.setEncoding(QTextStream::Unicode);
textStream << string;

// UTF-8
QString string; // my Unicode text
char* buffer;

buffer = QString.utf8().data();

Wolfram Diestel <wolfram@steloj.de>
translate in Korean by JungHo Park<baram4x@kernel.pe.kr>