与运行命令不一致&icon;'通过命令行与C ++应用程序

时间:2017-09-15 14:08:13

标签: c++ bash shell popen file-conversion

我正在尝试将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");

某些字符编码不正确。 例如。德语字符ü, ö, ä编码为�

我理解运算符>是一个shell功能,我认为在C ++操作中使用它会导致这种差异。

我也尝试使用popen("iconv -f CP1252 -t UTF-8 file.ldf |dos2unix > out.ldf", "r");,但没有成功。

是否有其他方法可以在不使用C ++应用程序中的out.ldf运算符的情况下将转换重定向到>

编辑:链接为重复的问题与此处提到的问题完全不同。

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 个答案:

没有答案