Pergunta

Eu estou apenas olhando para os construtores para StreamReader / escritor e eu notar que ele usa UTF8 como padrão. Alguém sabe por que isso é? Eu teria presumido que teria sido uma aposta mais segura para o padrão para Unicode.

Foi útil?

Solução

UTF-8 vai trabalhar com qualquer documento ASCII, e é tipicamente mais compacto do que UTF-16 - mas ainda abrange toda a Unicode. Eu diria que UTF-8 é muito mais comum do que UTF-16. É também o padrão para XML (quando não há BOM e nenhuma codificação explícita especificada).

Por que você acha que seria melhor para o padrão para UTF-16? (Isso é o que Encoding.Unicode é.)

EDIT: Eu suspeito que você está confuso sobre o que exatamente UTF-8 pode manipular. Esta página descreve isso muito claramente, incluindo como qualquer caractere especial Unicode é codificada. É uma codificação de largura variável, mas abrange toda a Unicode.

Outras dicas

UTF-8 é Unicode, mais especificamente um dos tipos que codificam Unicode.

Mais importante seus trás compatíveis com ASCII, mais ele é o padrão padrão para XML e HTML

"Unicode" é o nome de um padrão, por isso não há tal codificação como "Unicode". Em vez disso, existem dois métodos de mapeamento: UTF e UCS .

Como para "porquê" parte, UTF-8 tem o máximo de compatibilidade com ASCII.

Como todos os outros já disse, UTF-8 é um padrão de codificação dentro de Unicode. UTF-8 utiliza um número variável de bytes para codificar todos os caracteres Unicode existem.

Todos os caracteres ASCII são representados como seja, de tal forma que arquivos ASCII podem ser lidos com agora mais delongas. Assim que um byte no fluxo tem sua 8ª bit (bit mais alto,> 127) set, isso provoca o leitor a combiná-lo com o seguinte byte até que seja <128. A combinação, em seguida, é considerado como um personagem.

Existem caracteres em latim-1 (ANSII), que são codificados usando dois caracteres: por exemplo, E é codificado como e e '. Corpo ( 'E') é, por conseguinte, 2.

Windows usa UTF-16 internamente, o que limita os caracteres de codificação de 64K, o que não é de forma todos os caracteres Unicde. UTF-32, de momento, permite que todos os personagens, mas é artificialmente limitado também. E ambos não são para cima compatível com ASCII, como os zeros ter principais:

A = ASCII h41 = UTF-8 h41 = UTF-16 h0041 = UTF-32 h00000041

Há também pequenas e grandes codificações endian:

A = UTF-16 big endian h0041 = UTF-16 little endian h4100

Imagine usar UTF16 ou UTF32 para salvar seus arquivos. Eles iriam (para arquivos de texto) de casal ou quadrouple em tamanho, em comparação com ASCII e UTF-8 (UTF-8 se apenas caracteres ASCII são usados). UTF-8 não só permite a todos os caracteres no padrão Unicode, mesmo para futuras melhorias, mas o salva espaço de forma eficiente também.

Normalmente, os dois primeiros bytes de um arquivo, o BOM ou Byte Order marcador, dizer-lhe, qual codificação padrão é usado. Se omitido, XML e uso StreamRedaer UTF-8, como você descobriu. Este novo faz o sentido, como arquivos ASCII não tem um BOM e, portanto, na maioria dos casos são lidos corretamente. Isto pode não ser verdade para arquivos usando todos LATIN-1.

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