Я раньше путал долгое время:
Беспорядок на Unicode и многобайтовых статьях
После чтения комментариев всех участников, плюс:
Рассмотрение старой статьи (2001 год): http://www.hastingsresearch.com/net/04-unicode-limitations.shtml, который говорит о unicode:
будучи 16-разрядным символьным определением, позволяющим теоретическое общее количество более чем 65 000 символов. Однако полные наборы символов мира составляют в целом более чем 170 000 символов.
и Рассмотрение текущей "современной" статьи: http://en.wikipedia.org/wiki/Unicode
Обычно используемая кодировка является UTF-8 (который использует 1 байт для всех символов ASCII, которые имеют те же кодовые обозначения как в стандартном кодировании ASCII, и до 4 байтов для других символов), теперь устаревший UCS-2 (который использует 2 байта для всех символов, но не включает каждый символ в стандарт Unicode), и UTF-16 (который расширяет UCS-2, с помощью 4 байтов для кодирования символов, отсутствующих в UCS-2).
Кажется, что в параметрах компиляции в VC2008, опции "Unicode" под Наборами символов действительно означают "Unicode, закодированный в UCS-2" (Или UTF-16? Я не уверен),
Я пытаюсь проверить это путем выполнения следующего кода под VC2008
#include
int main()
{
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"我爱你") << std::endl;
// Use unicode encoded in UCS-2?
std::cout << sizeof(L"abc") << std::endl;
getchar();
// Compiled using options Character Set : Use Unicode Character Set.
// print out 8, 8
// Compiled using options Character Set : Multi-byte Character Set.
// print out 8, 8
}
Кажется, что во время компиляции с опциями Unicode Character Set, результат соответствовал моему предположению.
Но что относительно Многобайтового набора символов? Что делает средства Многобайтового набора символов в текущем "современном" мире?:)
http://en.wikipedia.org/wiki/Multi-byte_character_set
MBCS - это термин, используемый для обозначения класса кодировок символов, которые не могут быть представлены одним байтом, отсюда многобайтовый набор символов. Для того чтобы правильно декодировать строку в этом формате, вам нужна кодовая страница, которая сообщает вам, что различные комбинации байтов соответствуют символам. ISO/IEC 8859 определяет набор стандартов MBCS, но, согласно Википедии, ISO прекратила их поддержку в 2004 году, предположительно, чтобы сосредоточиться на Unicode.
Таким образом, я полагаю, что современный термин для MBCS - "устаревший в пользу Unicode".
многобайтный означает, что один символ хранится более чем в одном байте.
выдержка из википедии на utf8:
UTF-8 кодирует каждый символ (точка кода ) от 1 до 4 октетов (8-битных байтов), с использованием одиночной кодировки октета только для 128 символов US-ASCII.
по сути, utf8 - это многобайтовый набор символов :-).
В MSVC параметры "Unicode "в разделе" Наборы символов "означает, что _T (" X ")
заменяется на L" X "
. Если установлено значение MBCS, _T ("X")
расширяется до "X"
.
Другим следствием является то, будет ли макрос Win32 MessageBox ()
расширяться до MessageBoxW ()
или MessageBoxA
, а также до макросов для всех остальных функций Win32, которые появляются. в парах A / W.
Многобайтовый набор символов - это общий термин для любой схемы кодирования, которая может использовать более 1 байта для кодирования символа.
Когда вы слышите этот термин, вы обычно ожидаете, что он относится к одному из старых устаревших наборов символов, например, «IBM EBCDIC cp1390 - Japanese Kanji Multi Byte».
Все схемы UNICODE технически являются MBCS, но можно ожидать, что они будут называться «UNICODE» вместе или конкретно utf-8, utf-16 или utf-32.
Единственное «текущее» программное обеспечение, использующее набор символов MBCS, - это пакет Microsoft Office. Которая использует "Windows MBCS". Это почти идентично UTF-16, за исключением некоторых незначительных отличий. Из-за того, что Microsoft на раннем этапе приняла черновой вариант стандарта, некоторые небольшие части полного стандарта оказалось трудно реализовать, поэтому он придерживался термина «Windows MBCS».