Я пытаюсь преобразовать файл Windows формата CP1252 в формат UTF-8 для анализа в приложении C ++.
Я использую следующую команду:
iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf
Когда я пытаюсь запустить ту же команду в приложении C ++, используя:
system("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf");
некоторые символы не закодированы должным образом.
Например, немецкие символы ü, ö, ä
закодированы как �
Я понимаю что оператор >
это функция оболочки, и я думаю, что использование ее в операции C ++ вызывает это несоответствие.
Я также пытался использовать popen("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf", "r");
но безуспешно.
Есть ли другой способ перенаправить преобразование в out.ldf
без использования >
оператор в приложении C ++.
РЕДАКТИРОВАТЬ: вопрос, связанный, чтобы быть как дубликат, является совершенно другой проблемой, чем вопрос, который рассматривается здесь.
int main (int argc, char* argv[])
{
string FileName = "Invalid";
if (argc == 2) {
FileName = argv[1];
system("iconv -f CP1252 -t UTF-8" + FileName + "|dos2unix > out.ldf");
//system("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf");
//do further parsing on file
}
else
cout << "ERROR:: invalid number of arguments"<< endl;
return 0;
}//file.ldf -- windows file (CP1252 format)
physical_value, 0, 254, 0.5, -20, "�C";
//out.ldf -- after conversion using 'iconv' command on the command line
physical_value, 0, 254, 0.5, -20, "üC";
//out.ldf -- after conversion using the 'system' API
physical_value, 0, 254, 0.5, -20, "�C";
Задача ещё не решена.
Других решений пока нет …