Чтение файлов Unicode C ++ - PullRequest
7 голосов
/ 23 мая 2009

У меня простой вопрос. У меня есть текстовый файл UTF 16 для чтения, который начинается с FFFE. Каковы инструменты C ++ для работы с такого рода файлами? Я просто хочу прочитать его, отфильтровать несколько строк и отобразить результат.

Это выглядит просто, но у меня просто есть опыт работы с простыми файлами ascci, и я спешу. Я использую VS C ++, но я не хочу работать с управляемым C ++.

Привет

Вот очень простой пример

wifstream file; 
file.open("C:\\appLog.txt", ios::in);

wchar_t buffer[2048]; 
file.seekg(2);
file.getline(buffer, bSize-1);

wprintf(L"%s\n", buffer);
file.close();

Ответы [ 4 ]

2 голосов
/ 23 мая 2009

Поскольку вы спешите, используйте ifstream в двоичном режиме и выполняйте свою работу. У меня были такие же проблемы с тобой, и это спасло мой день. (это не рекомендуемое решение, конечно, просто взлом)

  ifstream file; 
  file.open("k:/test.txt", ifstream::in|ifstream::binary);

  wchar_t buffer[2048]; 
  file.seekg(2);
  file.read((char*)buffer, line_length);
  wprintf(L"%s\n", buffer);
  file.close();
2 голосов
/ 23 мая 2009

Вы можете использовать fgetws , который читает 16-битные символы. Ваш файл в порядке байтов. Поскольку машины с архитектурой x86 также имеют порядок байтов, вы сможете без проблем обработать файл. Если вы хотите сделать вывод, используйте fwprintf .

Кроме того, я согласен, что дополнительная информация может быть полезной. Например, вы можете использовать библиотеку, которая абстрагирует некоторые из них.

1 голос
/ 23 мая 2009

Что бы это ни стоило, я думаю, я читал, что вы должны использовать функцию Microsoft, которая позволяет вам определять кодировку.

http://msdn.microsoft.com/en-us/library/z5hh6ee9(VS.80).aspx

0 голосов
/ 23 мая 2009

FFFE - это просто начальная спецификация (метка порядка байтов). Просто читайте из файла, как обычно, но в широкий буфер символов.

...