Pergunta

Por exemplo: "½" ou ASCII dezembro 189. Quando eu li os bytes de um arquivo de texto a byte [] contém o valor válido, neste caso 189.

A conversão para Unicode resulta no caractere de substituição Unicode 65533.

UnicodeEncoding.Unicode.GetString (b);

Convertendo para resultados ASCII em 63 ou "?"

ASCIIEncoding.ASCII.GetString (b);

Se isto não for possível, qual é a melhor maneira de lidar com esses dados? Eu gostaria de ser capaz de realizar funções de cadeia como Replace ().

Foi útil?

Solução

Byte 189 representa um "½" em iso-8859-1 (aka "Latin-1"), de modo que o seguinte é talvez o que você quer:

var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });

Todos os strings e caracteres em .NET são UTF-16 codificado, então você precisa usar um codificador / decodificador para converter qualquer outra coisa, às vezes isso é padrão (por exemplo, UTF-8 para instâncias FileStream), mas boa prática é sempre especificar .

Você vai precisar de alguma forma de implícita ou (melhor) metadados explícita para lhe fornecer as informações sobre a codificação.

Outras dicas

Depende exatamente o que a codificação é.

Não há tal coisa como "ASCII 189." - ASCII só vai até 127. Há muitas codificações que um de 8 bits codificações usando ASCII para os primeiros 128 valores

Você pode quer Encoding.Default (que é a codificação padrão para seu sistema particular), mas é difícil saber com certeza. Onde é que seus dados vem?

O PC-8 ou estendido conjunto de caracteres ASCII de idade foi de cerca de antes de IBM e Microsoft introduziu a ideia de páginas de código para o mundo do PC. Este foi ASCII estendida -. Em 1982. Na verdade, foi o conjunto de caracteres disponível apenas no PC de no momento, até o cartão EGA permitido que você carregue outras fontes para VRAM

Este foi também o padrão padrão para terminais ANSI, e quase todos os BBS eu marquei até na década de 80 e início dos anos 90 usado esse conjunto de caracteres para exibir menus e caixas.

Aqui está o código para ligar 8-bit ASCII estendidos no texto Unicode. Observe o bit chave de código: o GetEncoding ( "437"). Que utilizou página de código 437 para traduzir o texto ASCII de 8 bits para o Unicode equivalente.

    string ASCII8ToString(byte[] ASCIIData)
    {
        var e = Encoding.GetEncoding("437");
        return e.GetString(ASCIIData);
    }

System.String[] não pode armazenar caracteres com ASCII > 127 se você está tentando trabalhar em quaisquer caracteres ASCII estendidos, como œ ¢ ½ ¾ aqui é o método para convertê-lo em seu binário e decimal equivalente

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