Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Unicode & Multi-Byte


Автор: Ap0k 29.1.2007, 16:24
Привет.
Си только ночал изучать и сразу возник вопрос : в чем разница между юникод и мульти-байт проектами?

Автор: _hunter 29.1.2007, 17:38
Открываем справку и читаем...
Цитата

The ASCII character set defines characters in the range 0x00 – 0x7F. There are a number of other character sets, primarily European, that define the characters within the range 0x00 – 0x7F identically to the ASCII character set and also define an extended character set from 0x80 – 0xFF. Thus an 8-bit, single-byte-character set (SBCS) is sufficient to represent the ASCII character set as well as the character sets for many European languages. However, some non-European character sets, such as Japanese Kanji, include many more characters than can be represented in a single-byte coding scheme, and therefore require multibyte-character set (MBCS) encoding.

Note  
Many SBCS routines in the Microsoft run-time library handle multibyte bytes, characters, and strings as appropriate. Many multibyte-character sets define the ASCII character set as a subset. In many multibyte character sets, each character in the range 0x00 – 0x7F is identical to the character that has the same value in the ASCII character set. For example, in both ASCII and MBCS character strings, the one-byte NULL character ('\0') has value 0x00 and indicates the terminating null character.
 

A multibyte character set may consist of both one-byte and two-byte characters. Thus a multibyte-character string may contain a mixture of single-byte and double-byte characters. A two-byte multibyte character has a lead byte and a trail byte. In a particular multibyte-character set, the lead bytes fall within a certain range, as do the trail bytes. When these ranges overlap, it may be necessary to evaluate the particular context to determine whether a given byte is functioning as a lead byte or a trail byte.

Автор: Ap0k 29.1.2007, 17:46
сенкс конечно, а можно простыми словами и по русски? =)

Автор: takedo 30.1.2007, 09:10
простыми: UniCode - на символ 2 байта, в MultiByte - 1 байт. Как известно в 1 байте 8 бит. Каждый бит может быть либо 0 либо 1 по определению. И это двоичное исчисление. Следовательно, ты можешь из 8 бит получить 2 в 8 степени комбинаций, то есть 256. А в двух байтах комбинаций 65536. Соответственно любимый всеми албанский язык может не поместиться в 256-ти комбинациях вместе с латинским-английским. А что говорить об иероглифах? Вот и сделали 2 байта - должно хватать всем. Сам понимаешь, что из одного байта ты с большей вероятностью перейдешь без потери информативности в два байта, чем обратно. Следовательно, для того, чтобы программы твои могли ходить по всему миру - работай в Unicode (надо то всего лишь галочку поставить). Аот и у тебя в подписи какая то шняжка из трех иероглифов - как они уживаются в 1 байте с латинским и русским(украинским) алфавитом(раскладкой).

Автор: Ap0k 30.1.2007, 10:50
Сенкс, понял)))

P.S: в подписи написано "доброе утро" по японски.

Автор: Ustus 1.2.2007, 22:15
[offtop]
Цитата(Ap0k @  30.1.2007,  10:50 Найти цитируемый пост)
 в подписи написано "доброе утро" по японски. 

с ашипкой smile
おはよう или お早う
[/offtop]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)