2010-03-10 5 views
5

moi étions confus un certain temps:Quel est le terme moderne actuel de « caractères multi-octets »

Confusion on Unicode and Multibyte Articles

Après avoir lu les commentaires par tous les contributeurs, plus:

en regardant un vieil article (Année 2001): http://www.hastingsresearch.com/net/04-unicode-limitations.shtml, qui parle de unicode:

étant une définition de caractère 16 bits permettant une theo total de plus de 65 000 caractères. Toutefois, les jeux de caractères complets du monde totalisent plus de 170 000 caractères.

et regardant l'article "moderne" actuel: http://en.wikipedia.org/wiki/Unicode

Les codages les plus couramment utilisés sont UTF-8 (qui utilise 1 octet pour tous les caractères ASCII , qui ont les mêmes valeurs de code comme dans le ASCII norme de codage, et jusqu'à 4 octets pour les autres caractères), l'UCS-2 désormais obsolète (qui utilise 2 octets pour tous caractères, mais ne comprend pas tous les caractères dans la sta Unicode ndard), et UTF-16 (qui étend UCS-2, en utilisant 4 octets pour coder les caractères manquants de UCS-2).

Il semble que dans les options de compilation dans VC2008, les options "Unicode" sous jeux de caractères signifie vraiment "Unicode codé en UCS-2" (ou UTF-16? Je ne suis pas sûr)

J'essaie de vérifier cela en exécutant le code suivant sous VC2008

#include <iostream> 

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 
} 

Il semble que lors de la compilation avec des options Set de caractères Unicode, le résultat correspond mon hypothèse.

Mais qu'en est-il du jeu de caractères multi-octets? Qu'est-ce que le jeu de caractères multi-octets signifie dans le monde "moderne" actuel? :)

+0

MBCS ne veut rien dire. Aujourd'hui, nous avons Unicode. Tout ce que tu savais avant est parti (surtout). –

+0

l'utilisation de la macro L oblige le compilateur à traiter les deux chaînes comme des "chaînes de caractères larges", ce qui donne un sens au résultat de (8, 8) que vous avez obtenu. Retrait du L donnera le résultat de (7, 4), selon Microsoft standard/shrug – YeenFei

+0

@Pototoswatter: De quoi parlez-vous? Un littéral de chaîne a un type de tableau, dans ce cas 'wchar_t const [4]'. Quand vous en dérérez, le tableau se désintègre d'abord en 'wchar_t const *'.Le déréférencement qui à son tour vous donne un 'wchar_t const'. Ainsi, '* L" 123456789 "== L'1'' et' sizeof (* L "123456789") == sizeof (L'1 ') ' – MSalters

Répondre

6

http://en.wikipedia.org/wiki/Multi-byte_character_set

MBCS est un terme utilisé pour désigner une classe de codages de caractères avec des caractères qui ne peuvent pas être représentés par un seul octet, d'où le caractère multi-octets. Afin de décoder correctement une chaîne dans ce format, vous avez besoin d'une page de code qui vous indique les différentes combinaisons d'octets mapper aux caractères. ISO/IEC 8859 définit un ensemble de normes MBCS, mais selon Wikipedia, l'ISO a cessé de les maintenir en 2004, sans doute pour se concentrer sur Unicode.

donc je suppose que le terme moderne pour MBCS est « dépréciée en faveur de l'Unicode ».

+0

+1. MBCS est un ensemble spécifique de codages, donc ne signifie pas le cas plus général de "l'utilisation de plus d'un octet par caractère". Unicode, UTF8 et UTF16 ne sont pas "MBCS", bien qu'ils soient codés sur plusieurs octets par caractère. –

0

multi-octets signifie qu'un caractère est stocké dans plus d'un octet.

extrait de wikipedia sur UTF8:

UTF-8 code pour chaque caractère (Code points) en 1 à 4 octets (octets à 8 bits), avec le codage de l'octet unique utilisé seulement pour la 128 caractères US-ASCII.

donc essentiellement, utf8 est un jeu de caractères multi-octets :-).

+0

Mais, si vous lisez http://msdn.microsoft.com/en-us/library/ey142t48%28VS.71%29.aspx#_core_mfc_support_for_mbcs_strings, les caractères multi-octets nécessitent une "page de code". mais, UTF-8 ne nécessite pas de page de code. –

+0

de wp: "UTF-8 facilite l'identification par un programme des trois types d'unités, car elles sont séparées les unes des autres: les anciens codages à largeur variable ne sont généralement pas aussi bien conçus. mêmes valeurs, et dans certains les trois sortes utilisent des valeurs qui se chevauchent. " mon interprétation: les caractères plus anciens définissent les pages de code nécessaires, utf8 a été conçu pour ne pas en avoir besoin. "Unicode a rendu les pages de code obsolètes en prenant en charge plus de langages et de caractères de manière plus cohérente" –

+0

Donc, cela signifie-t-il, nous ne pouvons pas le dire, UTF8 = Caractère Multi Byte de Microsoft? :) –

0

multi Byte Character Set est un terme général pour tout système de codage qui peut utiliser plus de 1 octet pour coder un caractère. Lorsque vous entendez le terme que vous attendez normalement, il se réfère à l'un des anciens jeux de caractères hérités comme dans "IBM EBCDIC cp1390 - Japanese Kanji Multi Byte".

Tous les schémas UNICODE sont techniquement des MBCS mais vous vous attendez à ce qu'ils soient référencés comme "UNICODE" collectivement ou utf-8, utf-16 ou utf-32 spécifiquement.

Le seul logiciel « courant » qui utilise un jeu de caractères MBCS est suite Microsoft Office. Qui utilise le "Windows MBCS". C'est presque identique à utf-16 à part quelques différences mineures. En raison de l'adoption anticipée par Microsofts du projet de norme, quelques petites parties de la norme complète se sont avérées difficiles à mettre en œuvre, de sorte que le terme "Windows MBCS" s'est maintenu.

0

En MSVC, les options "Unicode" sous Jeux de caractères signifie que _T("X") s'étend à L"X". S'il est défini sur MBCS, _T("X") se développe en seulement "X". Une autre conséquence est de savoir si la macro Win32 MessageBox() s'étend à MessageBoxW() ou MessageBoxA, ainsi que des macros pour toutes les autres fonctions Win32 en paires A/W.

+0

mais cela ne dit rien sur les encodages utilisés – jalf

+0

@jalf: True. Cela s'applique au paramètre IDE, à l'interprétation du compilateur des chaînes et au choix de la fonction A/W. Dans les trois cas, la distinction est booléenne et le codage MBCS non spécifié. – MSalters

0

Il semble que dans les options de compilation dans VC2008, les options "Unicode" sous les jeux de caractères signifie vraiment "Unicode codé en UCS-2" (ou UTF-16? Je ne suis pas sûr)

Il utilise Unicode codé en Utf-16 LE. L'article de Wikipédia que je lie a une note à cet effet.

Mais qu'en est-il des jeux de caractères multi-octets? Qu'est-ce que le jeu de caractères multi-octets signifie dans le monde "moderne" actuel? :)

MBCS est principalement used in the MSDN documentation to mean DBCS. C'est explained in more detail in this blog post. Si vous voulez éviter toute confusion, vous pouvez dire "Page de code MBCS".

Questions connexes