如何转换多个.txt&的编码类型.pro文件从ANSI到UTF-8

时间:2014-06-27 12:33:57

标签: encoding utf-8 character-encoding type-conversion

我在名为.txt的文件夹中有多个folder1个编码格式为ANSI的文件。我需要将其全部转换为另一个名为UTF-8的空文件夹中的folder2编码类型文件。 我不想逐个转换文件 - 我想一次转换它们。

1 个答案:

答案 0 :(得分:0)

使用带有CP_ACP的MultiByteToWideChar()将数据转换为WideChar,然后使用带有CP_UTF8的WideCharToMultiByte()转换为utf8,如果我们正在讨论c ++

static int to_utf8EncodeFile(std::wstring filePath)
{
    int error_code = 0;
    //read text file which will be in ANSI encoding type
    std::string fileName(filePath.begin(), filePath.end());
    std::string fileContent;
    fileContent = readFile(fileName.c_str());
    if(fileContent.empty())
    {
        return GetLastError();
    }
    int wchars_num =  MultiByteToWideChar( CP_ACP , 0 , fileContent.c_str() , -1, NULL , 0 );
    wchar_t* wstr = new wchar_t[wchars_num];
    error_code = MultiByteToWideChar( CP_ACP , 0 , fileContent.c_str() , -1, wstr , wchars_num );
    if(error_code == 0)
    {
        delete [] wstr;
        return GetLastError();
    }

    int size_needed = WideCharToMultiByte(CP_UTF8 , 0, &wstr[0], -1, NULL, 0, NULL, NULL);
    std::string strTo( size_needed, 0 );
    error_code = WideCharToMultiByte(CP_UTF8 , 0, &wstr[0], -1 , &strTo[0], size_needed, NULL, NULL);
    delete [] wstr;
    if(error_code == 0)
    {
        return GetLastError();
    }

    //Write utf-8 file
    std::ofstream utf_stream(filePath.c_str()); 
    utf_stream << strTo.c_str();
    utf_stream.close();
    return error_code;
    }

以上代码将单个ANSI文件转换为UTF8,您可以随意使用CP_UTF16, 希望代码将有所帮助