Como posso converter estendida ascii a um System.String?
-
21-08-2019 - |
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 ().
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