Я создал некоторые .txt-файлы на моем Mac (не думал, что это было бы важно сначала, но ...), чтобы я мог прочитать их в приложении, которое я делаю (к сожалению) Visual Studio на другом компьютере. Они в основном файлы заполнены записями, с количеством записей в строке в верхней части, например:Проблемы с getline/чтением файлов в Windows
2
int int
age name
9 Bob
34 Mary
12 Jim
...
В коде, который я первоначально только сделал (и успешно испытан) на Mac, я пытаюсь читать этот файл и аналогичные:
Table TableFromFile(string _filename){ //For a database system
ifstream infile;
infile.open(_filename.c_str());
if(!infile){
cerr << "File " << _filename << " could not be opened.";
exit(1);
}
//Determine number attributes (columns) in table,
//which is number on first line of input file
std::string num;
getline(infile, num);
int numEntries = atoi(num.c_str());
...
...
Короче говоря, это вызывает сбой! Когда я заглянул в нее, я нашел несколько интересных ошибок «Ошибка чтения символов» и обнаружил, что numEntries
получает какую-то сумасшедшую отрицательную ценность для мусора. Это, по-видимому, вызвано тем, что «num», которое должно быть просто «2», как видно из первой строки, на самом деле выходит как «ÿþ2».
Из небольшого исследования кажется, что эти странные символы форматируют вещи ... возможно, unicode/Mac специфический? В любом случае, это проблема, и мне интересно, есть ли быстрый и простой способ сделать текстовые файлы, созданные мной на моем Mac, сотрудничать и вести себя в Windows так же, как в терминале Mac. Я попытался подключиться к машине UNIX, поместив там txt-файл, запустив на нем unix2dos и вернувшись в VS, но безрезультатно ... все же эти символы в начале строки! Должен ли я просто делать свои входные файлы снова в Windows? Я очень удивлен, узнав, что то, что вы видите, это не всегда то, что вы получаете, когда речь идет о персонажах в файле на разных платформах ... но хороший урок, я полагаю.
байты в начале файла являются Unicode [Byte Order Mark] (http://en.wikipedia.org/wiki/Byte_order_mark), указывая, что текстовый файл закодирован в UTF-16 (LE). Как вы создали текстовый файл? С текстовым редактором? Вам нужны возможности Unicode в вашем проекте? – nwellnhof