Я работаю с текстовыми файлами (UTF-8) в Windows и хочу читать их с помощью C ++.
Чтобы открыть файл соответственно, я использую Еореп. Как описано Вот, Есть два варианта открытия файла:
Теперь это становится сложно. Я не хочу открывать файл в двоичном режиме, так как я потерял бы правильную обработку моих символов UTF-8 (и в моих текстовых файлах есть специальные символы, которые повреждены, когда интерпретируются как символы ANSI). Но я также не хочу, чтобы fopen конвертировал все мои CR + LF в LF.
Есть ли способ объединить два режима, чтобы прочитать текстовый файл в строку, не затрагивая перевод строки, и в то же время быть способным правильно читать UTF-8?
Я знаю, что обратное преобразование произойдет, если я напишу его через тот же файл, но строка будет отправлена в другое приложение, которое ожидает окончания строки в стиле Windows.
Разница между открытием файлов в текстовом и двоичном режиме именно так обработка последовательностей конца строки в текстовом режиме или не касаться их в двоичном режиме. Ни больше ни меньше. Поскольку символы ASCII используют одинаковые кодовые точки в Unicode, а UTF-8 сохраняет кодировку символов ASCII (т. Е. Каждый файл ASCII является файлом Unicode в кодировке UTF-8), независимо от того, используете ли вы двоичный или текстовый режим, это не повлияет на другие байты.
Возможно, стоит взглянуть на Джеймса Макнеллиса «Юникод в C ++» презентация на C ++ Сейчас 2014.