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]>