0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 11
1

Отличить числовые байты от строки utf-8

04.01.2015, 19:30. Показов 901. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!

Подскажет, как в шарпе отличить числовые байты от строки utf-8?
Вообщем, у меня есть сокет, в который приходит массив байт такого вида: <ushort><byte><data> (2, байта, 1 байт, остальные байты..)

Мне надо обработать такую ситуацию, когда вместо первых 3 числовых байт, будет utf-8 строка: <policy-file-request/> (Или её часть)

Вот как это лучше сделать? Спасибо!

Добавлено через 8 минут
Что-то вроде этого?

C#
1
2
3
4
5
byte[] buffer    = new byte[ socket.Available ];
 
socket.Receive( buffer );
 
Console.WriteLine( "Это похоже на utf-8? " + Encoding.UTF8.GetString(buffer) );
Или можно как-то более красиво проверить первые три байта, на предмет их отношения к utf-8?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.01.2015, 19:30
Ответы с готовыми решениями:

Кодирование строк unicode в байты utf-8
Необходимо написать две функции: для декодирования байтов UTF-8 в строки Unicode и для кодирования...

Зачем в начале файла utf-16 нужны байты 0XFF и 0XFE?
Друзья! Хоть убей не пойму, зачем перед строкой нужны байты 0xFF 0xFE. Везде можно прочесть, что...

UTF-8 кодировка буквы "й", как эти байты перекодировать обратно в букву
Помогите пожалуйста , допустим у меня есть utf8 кодировка буквы &quot;й&quot; которая представлена байтами 53...

getBytes('UTF-16') даёт UTF-16LE или UTF-16BE?
Добрый день! Делаю J2ME-клиента к некому серверу, исходников которого у меня нет, но есть...

3
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
04.01.2015, 19:44 2
Цитата Сообщение от Tails Посмотреть сообщение
Или можно как-то более красиво проверить первые три байта, на предмет их отношения к utf-8?
Строка <policy-file-request/> это 22 байта в кодировке UTF-8 без BOM.

Считать первые 22 байта, преобразовать в строку, если она равна данной строке, значит это она. Иначе берешь первые 3 байта...

Если первые 3 байта в противном случае могут иметь совершенно любые значения то по другому никак.
0
Администратор
Эксперт .NET
17019 / 13372 / 5217
Регистрация: 17.03.2014
Сообщений: 27,344
Записей в блоге: 1
04.01.2015, 20:21 3
Tails, т.к. строка фиксированная, то можно проверить что ты получил определенные байты. Например, возьмем строку "<policy-" в качестве маркера. В кодировке UTF-8 ей будут соответствовать байты: 60, 112, 111, 108, 105, 99, 121, 45. И если buffer начинается с этих байтов, то считаем что получили строку. Можно выбрать строку длиннее, чтобы вероятность перепутать была ниже.

Можно также использовать кодировщик который генерирует исключения встретив неправильные байты. По умолчанию, он их молча заменяет на вопросительный знак.
C#
1
2
3
4
5
6
7
8
9
10
11
bool IsUTF8(byte[] data)
{
    var utf8 = new UTF8Encoding(false, true);
    try
    {
        string s = utf8.GetString(data);
        return true;
    }
    catch { }
    return false;
}
Добавлено через 32 минуты
Вдогонку. Вызывать функцию IsUTF8(byte[]) можно только получив _все_ данные т.к. кодировка UTF8 многобайтовая и несколько байтов могут оказаться разделенными, если вызывать её только для части данных.
0
0 / 0 / 0
Регистрация: 12.12.2014
Сообщений: 11
04.01.2015, 23:26  [ТС] 4
Большое спасибо за советы. Ситуация стало немного яснее для меня.
0
04.01.2015, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2015, 23:26
Помогаю со студенческими работами здесь

Как отличить число от строки?
Всем привет. Подскажите пожалуйста: Пользователь подаёт на вход строку ( название группы, если...

<globalization fileEncoding='utf-8' requestEncoding='utf-8' responseEncoding='utf-8' />
Если в коде пишу строку скажем Response.Write ('Вася дурак') - все срабатывает нормально, а если в...

Конвертация из ASCII в UTF-32 или UTF-8 в UTF-32
Собсно сабж.

Строки и байты
Есть некая программа Значения в строке(STR) HEX КОДЫ (ПРИМЕР 06 41 6F) 1 Вопрос, как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru