bash — Несоответствие при запуске команды ‘iconv’ через командную строку против приложения C ++

Я пытаюсь преобразовать файл 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";

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]