Подтвердить что ты не робот

Как преобразовать расширенный ascii в System.String?

Например: "½" или ASCII DEC 189. Когда я читаю байты из текстового файла, байт [] содержит допустимое значение, в этом случае 189.

Преобразование в Unicode приводит к символу замены Unicode 65533.

UnicodeEncoding.Unicode.GetString(б);

Преобразование в ASCII приводит к 63 или "?"

ASCIIEncoding.ASCII.GetString(б);

Если это невозможно, то какой способ обработки этих данных лучше всего подходит? Я хотел бы иметь возможность выполнять строковые функции, такие как Replace().

4b9b3361

Ответ 1

Байт 189 представляет собой "½" в iso-8859-1 (он же "Latin-1" ), поэтому возможно, что вы хотите:

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

Все строки и символы в .NET кодируются в кодировке UTF-16, поэтому вам нужно использовать кодировщик/декодер для преобразования чего-либо еще, иногда это по умолчанию (например, UTF-8 для экземпляров FileStream), но хорошая практика заключается в том, чтобы всегда указывать.

Вам понадобится некоторая форма неявных или (лучше) явных метаданных, чтобы предоставить вам информацию о том, какая кодировка.

Ответ 2

Старый PC-8 или расширенный набор символов ASCII был вокруг, прежде чем IBM и Microsoft представили идею кодовых страниц в мир ПК. Это WAS Extended ASCII - в 1982 году. Фактически, это был единственный набор символов, доступный на ПК в то время, вплоть до того, как карта EGA позволила вам загружать другие шрифты в VRAM.

Это был также стандарт по умолчанию для терминалов ANSI, и почти каждый BBS, набранный мной в 80 и начале 90-х годов, использовал этот набор символов для отображения меню и полей.

Здесь код для превращения 8-разрядного расширенного ASCII в текст Unicode. Обратите внимание на бит ключа: GetEncoding ( "437" ). Это использовало Code Page 437 для перевода 8-битного текста ASCII в эквивалент Unicode.

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

Ответ 3

Это зависит от того, что такое кодировка.

Нет такой вещи, как "ASCII 189" - ASCII только поднимается до 127. Существует много кодировок, которые кодируют 8-битные кодировки, используя ASCII для первых 128 значений.

Вы можете захотеть Encoding.Default (который является кодировкой по умолчанию для вашей конкретной системы), но это трудно понять наверняка. Откуда взялись ваши данные?

Ответ 4

System.String[] не может хранить символы с ASCII > 127 если вы пытаетесь работать с любыми расширенными символами ASCII, такими как œ ¢ ½ ¾ здесь, это метод преобразования его в их двоичный и десятичный эквивалент