Кодировка символов фиксированного размера

Я разрабатываю в VB.Net приложение, которое читает текстовые файлы с использованием объекта FileStream. Я не использую StreamReader, так как буферизация делает невозможным использование Seek.

Эти текстовые файлы образуют базу данных с индексными файлами и файлами данных. В индексных файлах все поля имеют фиксированную длину, чего нельзя сказать о файлах данных.

Я недавно столкнулся с проблемой. Поскольку некоторые из моих файлов содержат диакритические знаки, соответствующие символы занимают более 1 байта. Поэтому, когда я ищу в индексном файле и появляется смещение, остальная часть моего индексного файла читается неправильно.

Я ищу кодировку, которая позволяет использовать акценты, специальные символы и т. д., где каждый символ хранится с использованием одинакового количества байтов. Сюда,; Я мог бы еще поискать в своих файлах. Это существует?

Спасибо,

СФП.


person Clément    schedule 21.12.2009    source источник


Ответы (2)


Я считаю, что UTF-16 будет иметь все диакритические знаки, и каждый символ такое же количество байт.

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

person Oded    schedule 21.12.2009
comment
Незначительная проблема: символы выше диапазона кода 010000 будут иметь длину 4 байта, а не 2. Основная проблема: разложенная форма будет занимать 2 комбинирующих символа (например, (U+00E9, ЛАТИНСКАЯ СТРОЧНАЯ БУКВА E С ОСТРОЙ) может быть заменена на (U+ 0065, СТРОЧНАЯ ЛАТИНСКАЯ БУКВА E и U+0301, СОЧЕТАНИЕ ОСТРОГО АКЦЕНТА)). - person Jerome; 21.12.2009

UTF-32 — единственная (без потерь) кодировка, для которой гарантирована фиксированная длина. Однако это вызывает много накладных расходов.

Чего я не понимаю, так это того, что вы заявляете, что ваш индексный файл содержит поля фиксированной длины. Это означает, что у вас не должно быть проблем. Вы можете искать в индексном файле, используя эти фиксированные длины. А затем искать в файле данных, используя заданный адрес в индексном файле. Вы всегда окажетесь в начале текста. Что мне не хватает?

person Tomas    schedule 21.12.2009
comment
На самом деле я имел в виду фиксированную длину по количеству символов. И я боюсь, что на мобильных устройствах utf32 не поддерживается. Зато Юникод прекрасно работает. - person Clément; 21.12.2009