Определить завершение UTF-16 строки. (парсинг PDF)
От: maloi_alex СССР  
Дата: 28.08.10 16:00
Оценка:
Не знал в какой форум написать. Использую C#, поэтому написал сюда.

Мне нужно правильно распарсить символьные блоки в PDF документе. Такие блоки могут содержать в том числе и текст в кодировке UTF-16, который сохраняется в виде массива байт.

Обычно такой блок выглядит таким образом:
1. Сначала идет символ открывающей скобки "(".
2. Затем идет сигнатура UTF-16 0xFE 0xFF.
3. Дальше идет сам текст в виде массива двух-байтных символов.
4. Дальше может могут идти любые однобайтные символы.
5. Закрывается блок символом ")"

К примеру, пусть есть строка "qwertyАБВГД123".

В PDF она хранится таким вот образом:


Начала строки я определяю по сигнатуре 0xFE 0xFF. Затем начинаю выбирать массив байт.
Тут возник вопрос: как корректно определить позицию где кончается массив двух-байтных символов, и начинаются однобайтные.
Первое что пришло в голову, определять является ли символ двух-байтный по первому нулевому байту.

Корректен ли такой подход, или здесь есть еще какие-то тонкости которых я не знаю?
Re: Определить завершение UTF-16 строки. (парсинг PDF)
От: maloi_alex СССР  
Дата: 28.08.10 16:09
Оценка:
PS. Там к тому же еще не все первые байты нулевые.
Re: Определить завершение UTF-16 строки. (парсинг PDF)
От: maloi_alex СССР  
Дата: 28.08.10 17:55
Оценка:
Здравствуйте, maloi_alex, Вы писали:

Сам себе отвечу.

Строка завершается одно-байтный символом ')'.
Спецсимволы '\n', '\r', '\t', '\b', '\f', '(', ')', '\\' хранятся в виде 3 байт, где первый байт 0x0, второй — '\' и третий — код спецсимвола.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.