我在名为.txt
的文件夹中有多个folder1
个编码格式为ANSI的文件。我需要将其全部转换为另一个名为UTF-8
的空文件夹中的folder2
编码类型文件。
我不想逐个转换文件 - 我想一次转换它们。
答案 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, 希望代码将有所帮助