Domanda

Il termine multibyte si riferiscono a un set di caratteri i cui personaggi si può - ma non c'è bisogno di essere - più ampio di 1 byte, (ad esempio UTF-8) o lo fa riferimento al set di caratteri, che sono in ogni caso più ampia di 1 byte (ad esempio UTF-16)? In altre parole:? Che cosa si intende, se qualcuno parla di set di caratteri multibyte

È stato utile?

Soluzione

Il termine è ambiguo, ma nel mio lavoro di internazionalizzazione, di solito evitato il termine "set di caratteri multibyte" per riferirsi a codifiche Unicode-based. In generale, abbiamo usato il termine solo per schemi di codifica eredità che ha avuto uno o più byte per definire ogni carattere (escludendo codifiche che richiedono un solo byte per carattere).

Shift-JIS, JIS, EUC-JP, EUC-KR, con codifiche cinesi sono in genere inclusi.

La maggior parte delle codifiche legacy, con alcune eccezioni, richiedono una sorta di modello di macchina a stati (o, più semplicemente, un modello di scambio pagina) per elaborare, e lo spostamento all'indietro in un flusso di testo è complicato e soggetto a errori. UTF-8 e UTF-16 non soffrono di questo problema, come UTF-8 può essere testato con un bit e UTF-16 possono essere testati contro una serie di coppie di surrogati, così muoversi avanti e indietro in un documento non patologico può essere fatto in modo sicuro senza grandi complessità.

Qualche codifiche legacy, per le lingue come il tailandese e vietnamita, hanno alcune delle complessità di set di caratteri multibyte, ma sono in realtà appena costruito sulla combinazione di caratteri, e in genere non sono ammassati dentro con il termine generico "multibyte".

Altri suggerimenti

  

Che cosa si intende, se qualcuno parla di set di caratteri multibyte?

Che, come al solito, dipende da chi sta facendo parlare!

A rigor di logica, esso dovrebbe includere UTF-8, Shift-JIS, GB, ecc .: le codifiche a lunghezza variabile. UTF-16 non sarebbe spesso essere considerato in questo gruppo (anche se di tipo è, quello che con i surrogati, e certamente è più byte quando codificato in byte tramite UTF-16 / UTF-16BE).

Ma in Microsoftland il termine sarebbe più tipicamente essere utilizzato per indicare un sistema predefinito di lunghezza variabile tabella codici (per le applicazioni non Unicode legacy, di cui ci sono purtroppo ancora molto). In questo utilizzo, UTF-8 e UTF-16 / UTF-16BE non può essere incluso perché la tabella di codici di sistema su Windows non può essere impostato a una di queste codifiche.

In effetti, in alcuni casi “mbcs” non è altro che un sinonimo per la tabella di codici del sistema, altrimenti noto (anche più fuorviante) come “ANSI”. In questo caso, un set di caratteri “multibyte” potrebbe effettivamente essere qualcosa di così banale come CP1252 dell'Europa occidentale, che utilizza un solo byte per carattere!

Il mio consiglio: usare “lunghezza variabile” quando si intende che, e di evitare il termine “multibyte” ambiguo; quando qualcun altro lo usa avrete bisogno di chiedere chiarimenti, ma in genere una persona con uno sfondo di Windows parlerà un'eredità Est tabella codici asiatici come cp932 (Shift-JIS) e non di un UTF.

Tutti i set di caratteri in cui non avete un 1 byte = 1 mappatura dei caratteri. Tutte le varianti Unicode, ma anche set di caratteri asiatici sono multibyte.

Per ulteriori informazioni, vi suggerisco di leggere questo articolo Wikipedia .

Un carattere multibyte significherà un personaggio che codifica richiede più di 1 byte. Questo non implica tuttavia che tutti i caratteri utilizzando la stessa codifica particolare avranno la stessa larghezza (in termini di byte). Per esempio:. UTF-8 e UTF-16 caratteri codificati possono utilizzare più volte byte che tutti UTF-32 caratteri codificati sempre usare 32 bit

References:

Tipicamente il primo, cioè UTF-8-like. Per ulteriori informazioni, vedere Variable-larghezza codifica .

Il primo -. Sebbene il termine "lunghezza variabile codifica" sarebbe più appropriato

Io in genere uso per riferirsi a qualsiasi carattere che possono avere più di un byte per carattere.

  

Un set di caratteri multibyte può essere costituito sia un byte e due byte   personaggi. Così una stringa di caratteri multibyte può contenere una miscela di   singolo byte e caratteri a doppio byte.

Rif: singolo byte e multibyte set di caratteri

UTF-8 è multi-byte, il che significa che ogni personaggio inglese (ASCII) è memorizzato in 1 byte, mentre il carattere non inglese come il cinese, tailandese, viene memorizzato in 3 byte. Quando si mescolano cinese / Thai con l'inglese, come "ท t", il primo carattere tailandese "ท" utilizza 3 byte, mentre il secondo carattere inglese "t" utilizza solo 1 byte. Le persone che hanno progettato codifica multi-byte resi conto che il carattere inglese non deve essere conservato in 3 byte mentre può inserirsi in 1 byte a causa della perdita di spazio di memorizzazione.

UTF-16 memorizza ogni carattere inglese o non inglesi in una lunghezza di 2 byte fissa quindi non è multi-byte ma chiamato un carattere esteso. E 'molto adatto per le lingue cinese / Thai, dove ogni personaggio si inserisce interamente in 2 byte, ma la stampa a UTF-8 output della console bisogno di una conversione da carattere esteso in formato multi-byte utilizzando wcstombs funzione ().

UTF-32 memorizza ogni carattere in una lunghezza di 4 byte fissa ma nessuno usarla per memorizzare carattere causa di uno spreco di spazio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top