Pergunta

Será que o termo multibyte se referir a um conjunto de caracteres cujos caracteres pode - mas não tem que ser - mais largo do que 1 byte, (por exemplo, UTF-8) ou o faz referir-se a conjuntos de caracteres que são em qualquer caso, mais amplo do que 1 byte (por exemplo, UTF-16)? Em outras palavras: O que significa se fala a ninguém sobre conjuntos de caracteres de vários bytes

?
Foi útil?

Solução

O termo é ambíguo, mas no meu trabalho de internacionalização, que normalmente evitado o termo "multibyte conjuntos de caracteres" para se referir a codificações baseados em Unicode. Geralmente, usamos o termo apenas para sistemas legados de codificação que tinham um ou mais bytes para definir cada personagem (excluindo codificações que exigem apenas um byte por caractere).

Shift-JIS, JIS, EUC-JP, euc-kr, juntamente com codificações chineses são normalmente incluídos.

A maioria das codificações legadas, com algumas exceções, exigem um tipo de modelo de máquina de estado (ou, mais simplesmente, uma página modelo trocando) para processar, e movendo-se para trás em um fluxo de texto é complicado e propenso a erros. UTF-8 e UTF-16 não sofrem deste problema, como UTF-8 podem ser testados com uma máscara de bits e UTF-16 pode ser testada contra uma variedade de pares de substituição, de modo que se deslocam para trás e para a frente numa lata documento não-patológico ser feito com segurança, sem grande complexidade.

Algumas codificações legadas, para línguas como o tailandês e vietnamita, têm um pouco da complexidade de conjuntos de caracteres de vários bytes, mas são realmente apenas construído na combinação de caracteres, e não são geralmente consideradas em conjunto com o termo amplo "multibyte."

Outras dicas

O que significa se fala a ninguém sobre conjuntos de caracteres de vários bytes?

Isso, como sempre, depende de quem está fazendo a falar!

Logicamente, deve incluir UTF-8, Shift-JIS, GB etc .: as codificações de comprimento variável. UTF-16, muitas vezes não ser considerado neste grupo (mesmo que tipo de é, o que com os substitutos; e, certamente, é vários bytes quando codificado em bytes via UTF-16LE / UTF-16BE)

.

Mas em Microsoftland o termo seria mais tipicamente ser usado para significar uma de comprimento variável de página de código padrão do sistema (para aplicações não-Unicode legados, dos quais existem, infelizmente, ainda muito). Neste uso, UTF-8 e UTF-16LE / UTF-16BE não pode ser incluída porque a página de código do sistema no Windows não pode ser definida como qualquer uma dessas codificações.

Na verdade, em alguns casos “MBCS” não mais do que um sinônimo para a página de códigos do sistema é, também conhecido (ainda mais erroneamente) como “ANSI”. Neste caso, um “multibyte” conjunto de caracteres poderia realmente ser algo tão trivial como CP1252 da Europa Ocidental, que usa apenas um byte por caractere!

Meu conselho: use “variable-length” quando você quer dizer isso, e evitar o termo “multibyte” ambígua; quando alguém usa-lo você vai precisar para pedir esclarecimentos, mas normalmente alguém com um fundo do Windows estará falando sobre um legado página de códigos do Leste Asiático como cp932 (Shift-JIS) e não um UTF.

Todos os conjuntos de caracteres que você não tem um 1 byte = 1 mapeamento de caracteres. Todos Unicode variantes, mas conjuntos de caracteres também asiáticos são multibyte.

Para mais informações, sugiro a leitura este artigo Wikipedia.

Um personagem multibyte vai significar uma personagem cuja codificação requer mais do que 1 byte. Isto não significa, contudo, que todos os caracteres que utilizam a codificação particular irá ter a mesma largura (em termos de bytes). Por exemplo:. UTF-8 e UTF-16 caracteres codificados podem usar vários bytes, por vezes, ao passo todas UTF-32 caracteres codificados sempre uso de 32-bits

Referências:

Normalmente, o primeiro, isto é, UTF-8-like. Para mais informações, consulte de largura variável codificação .

O ex -. Embora o termo "de comprimento variável de codificação" seria mais apropriado

Eu geralmente usam para se referir a qualquer personagem que pode ter mais de um byte por caractere.

Um conjunto de caracteres multibyte podem ser constituídos por um byte e de dois bytes personagens. Assim, uma cadeia de vários bytes caracteres podem conter uma mistura de De byte único e de byte duplo caracteres.

Ref: de byte único e multibyte Conjuntos de caracteres

UTF-8 é multi-byte, o que significa que cada personagem Inglês (ASCII) é armazenado em 1 byte enquanto o personagem não-Inglês como o chinês, tailandês, é armazenado em 3 bytes. Quando você mistura chinês / tailandês com o Inglês, como "? t", o primeiro caractere Thai "?" usa 3 bytes, enquanto o segundo caráter Inglês "t" usa apenas 1 byte. As pessoas que projetaram multi-byte codificação realizada esse personagem Inglês não deve ser armazenado em 3 bytes enquanto ele pode caber em 1 byte devido ao desperdício de espaço de armazenamento.

UTF-16 lojas cada personagem Inglês ou não-Inglês em um comprimento byte fixo 2 por isso não é multi-byte mas chamou uma grande personagem. É muito apropriado para as línguas chinesa / tailandesa, onde cada personagem se encaixa inteiramente em 2 bytes, mas a impressão com a necessidade de saída utf-8 consola uma conversão de caractere largo para o formato multi-byte usando wcstombs () função.

UTF-32 lojas de cada personagem em um comprimento de 4 bytes fixo, mas de uso ninguém lo para armazenar caracteres devido a um desperdício de espaço de armazenamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top