строка — чтение текстового файла в C ++ с fopen без преобразования перевода строки

Я работаю с текстовыми файлами (UTF-8) в Windows и хочу читать их с помощью C ++.

Чтобы открыть файл соответственно, я использую Еореп. Как описано Вот, Есть два варианта открытия файла:

  • Текстовый режим «rt» (возврат каретки + перевод строки автоматически преобразуется в перевод строки; короткий «\ r \ n» становится «\ n»).
  • Двоичный режим «rb» (файл будет прочитан побайтово).

Теперь это становится сложно. Я не хочу открывать файл в двоичном режиме, так как я потерял бы правильную обработку моих символов UTF-8 (и в моих текстовых файлах есть специальные символы, которые повреждены, когда интерпретируются как символы ANSI). Но я также не хочу, чтобы fopen конвертировал все мои CR + LF в LF.

Есть ли способ объединить два режима, чтобы прочитать текстовый файл в строку, не затрагивая перевод строки, и в то же время быть способным правильно читать UTF-8?

Я знаю, что обратное преобразование произойдет, если я напишу его через тот же файл, но строка будет отправлена ​​в другое приложение, которое ожидает окончания строки в стиле Windows.

0

Решение

Разница между открытием файлов в текстовом и двоичном режиме именно так обработка последовательностей конца строки в текстовом режиме или не касаться их в двоичном режиме. Ни больше ни меньше. Поскольку символы ASCII используют одинаковые кодовые точки в Unicode, а UTF-8 сохраняет кодировку символов ASCII (т. Е. Каждый файл ASCII является файлом Unicode в кодировке UTF-8), независимо от того, используете ли вы двоичный или текстовый режим, это не повлияет на другие байты.

Возможно, стоит взглянуть на Джеймса Макнеллиса «Юникод в C ++» презентация на C ++ Сейчас 2014.

4

Другие решения


По вопросам рекламы [email protected]