2010-02-16 3 views
0

Мне нужно открыть файл с символами кириллицы. Я закодировал файл в utf8. Вот пример:Чтение файла с кириллицей

ан: Не могли бы ваша семья позволить себе костюм для вас
    ру: Не ваша семья позволить себе костюм для вас

Как открыть файл:

ifstream readFile(fileData.c_str()); 
while (!readFile.eof()) 
{ 
    std::getline(readFile, buffer); 
    ... 
} 

Первая проблема, есть символ перед текстом 'en' (я видел это в отладчик):

«ï» ¿ан: минимум»

И еще одна беда в том, кириллические символы:

"RU: нР° имÐμньÑий"

Что случилось?

ответ

3

есть некоторый символ, прежде чем текст 'ан'

Это лже-BOM, результат кодирования U + FEFF BYTE ORDER MARK символ в кодировке UTF-8.

Поскольку UTF-8 является кодировкой, которая не имеет порядка байтов, faux-BOM никогда не должен использоваться, но, к сожалению, довольно много существующего программного обеспечения (особенно в мире MS), тем не менее. Загрузите файл сообщений в текстовый редактор и сохраните его снова как UTF-8, используя кодировку «UTF-8 без спецификации», если она особенно указана.

RU: нР° имÐμньÑий

Вот что вы получаете, когда у вас есть UTF-8 байт строки (представляющий наименьший) и распечатать его, как если бы это был код Стр. 1252 (Windows Western European). Это не проблема ввода; вы прочитали строку OK и получили строку байта UTF-8. Но тогда, в коде, который вы не цитировали, он выводится как cp1252.

Если вы просто печатаете его на консоли, это следует ожидать, так как консоль всегда использует кодовую страницу по умолчанию для системы (1252 для западной установки Windows), а не UTF-8. Если вам нужно отправить Unicode на консоль, вам придется преобразовать байты в native-Unicode wchar s и записать их оттуда. Я не знаю, каков конечный пункт назначения для ваших строк, хотя ... если вы просто собираетесь записать их в другой файл или что-то, что вы могли бы просто сохранить в байтах и ​​не заботиться о том, в какой кодировке они находятся.

0

Используйте libiconv для преобразования текста в кодировку, которую можно использовать после чтения.

1

Я полагаю, что ваши os - это окна.Существует несколько способов просто:

  1. Использование wchar_t, wstring, wifstream и т.д.
  2. библиотека Использование СИС
  3. Используйте другие библиотеки супер пупер (их очень много)

Примечание: для консоли печати вы должны использовать функции WinApi для преобразования UTF-8 в cp866 (моя кодировка кириллических окон по умолчанию cp1251), поскольку консоль Windows поддерживает только кодировки dos.

Примечание: для печати файлов вам необходимо знать, какая кодировка использует ваш файл.

Смежные вопросы