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 <[email protected]>
translate in Korean by JungHo Park<[email protected]>

Hosted by www.Geocities.ws

1