ISO латинский 1 байт на символ - PullRequest
2 голосов
/ 03 января 2011

Если у меня есть byte b, закодированный как ISO Latin 1 (ISO 8859-1), достаточно ли сделать char output = (char)b; Это похоже на работу, но я не знаю, есть ли другой способ.

Ответы [ 6 ]

3 голосов
/ 03 января 2011

Прямое приведение работает для этой конкретной кодировки. Однако для правильного преобразования рекомендуется использовать метод Encoding.GetChars .

private static readonly Encoding Iso88591 = Encoding.GetEncoding("ISO8859-1");

public static void Main() {
    var bytes = new Byte[] { 65 };
    var chars = Iso88591.GetChars(bytes);
}
2 голосов
/ 03 января 2011

Да, это должно работать нормально. Если вы посмотрите на диаграмму Unicode для 8859-1 , между 8859-1 и Unicode будет отображаться взаимно-однозначное соответствие. Это означает, что вы можете просто привести его к чарсу.

Однако это не относится ко всем кодовым страницам, поэтому более надежное решение может быть хорошей идеей.

1 голос
/ 03 января 2011

Вы можете использовать класс Encoding - в частности, встроенный Encoding.ASCII для получения символов из байтовых массивов.

В частности, один изперегрузки GetChars.

0 голосов
/ 03 января 2011

Вы можете использовать Encoding.Convert.

        byte[] latin1 = new byte[]{}; // Your data goes here, obviously
        byte[] converted = Encoding.Convert(Encoding.GetEncoding("latin1"), Encoding.ASCII, latin1);

После этого вы можете работать с новым байтовым массивом, не беспокоясь о том, что Latin 1 вызовет проблемы.

0 голосов
/ 03 января 2011

Если значение байта <128, все в порядке. Если это> = 128, простое приведение, скорее всего, не даст вам правильного символа.

Кодовые страницы ISO в основном все ASCII, с ключевым отличием, заменяющим верхнюю половину значений кодовой страницы (которые IIRC на базовой странице ASCII являются в основном штриховыми символами, полезными в консольных приложениях) символами, полезными для языка кодовая страница.

ОДНАКО, быстрый взгляд на кодовую страницу Unicode говорит о том, что приложение Latin-1 занимает значения 80-FF (128-255). Так что в этом особом случае вы, вероятно, в порядке, но если что-то входит, например, в кириллическую кодовую страницу ISO, вам придется явно преобразовать в символы Unicode.

0 голосов
/ 03 января 2011

Я бы использовал BitConverter х ToChar.Помните, что, например, char в .NET является 2-байтовым значением по умолчанию - подобное простое приведение (даже если оно работает, что может) - не самая лучшая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...