Библиотека чтения файлов C ++ - ANSI и Unicode - PullRequest
1 голос
/ 18 июня 2009

Я прочитал здесь несколько ответов о чтении файлов Unicode и т. Д., И большинство людей указывают на UTF8-CPP или iconv.

Ни одна из библиотек, которые я нашел, не работает как для файлов ANSI, так и для файлов Unicode, в идеале мне нужна одна функция, которой я передаю имя файла, и она будет возвращать содержимое этого файла, и не имеет значения, какая кодировка используется это не возможно?

Если да, то как мне поступить?

Ответы [ 3 ]

2 голосов
/ 18 июня 2009

Ну, это бинарное чтение, не так ли? Все другие формы являются предметом интерпретации, и тогда точное кодирование и т. Д. Становится важным.

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

0 голосов
/ 02 августа 2010

Вы можете использовать комбинацию техник:

Как правило, большинство файлов Unicode начинаются с BOM . Это означает, что если файл начинается с 0xfffe или 0xfeff, вы можете предположить, что это Unicode. Не многие люди используют UTF-32 AFAIK, но вы все равно можете использовать метод спецификации, чтобы угадать (см. Страницу Wiki).

Если это файл UTF-8, вы можете использовать UTF8-CPP для его преобразования в UTF-16 (wstring). Если это файл UTF-16, его может быть сложно прочитать с помощью стандартной библиотеки. Тат, вы можете обратиться к моему сообщению в блоге:

http://cfc.kizzx2.com/index.php/reading-a-unicode-utf16-file-in-windows-c/

Для UTF-32 - я не знаю, использует ли это кто-либо, поэтому у меня нет опыта: P

0 голосов
/ 18 июня 2009

UTF8-CPP может обнаружить UTF8 (utf8 :: is_valid и utf8 :: find_invalid) и выполнить преобразование (utf8 :: utf16to8), если вы используете widestring. Отлично работает, в чем проблема?

...