gpt4 book ai didi

c++ - C++中如何设置文件编码格式为UTF8

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:50 24 4
gpt4 key购买 nike

我的软件的要求是包含导出数据的文件的编码应为 UTF8。但是当我将数据写入文件时,编码始终是 ANSI。 (我使用 Notepad++ 检查这个。)

我目前正在做的是尝试通过读取文件、将其转换为 UTF8 并将文本写入新文件来手动转换文件。

line 是一个 std::string
inputFile 是一个 std::ifstream
pOutputFile 是一个 FILE*

// ...

if( inputFile.is_open() )
{
while( inputFile.good() )
{
getline(inputFile,line);

//1
DWORD dwCount = MultiByteToWideChar( CP_ACP, 0, line.c_str(), -1, NULL, 0 );
wchar_t *pwcharText;
pwcharText = new wchar_t[ dwCount];

//2
MultiByteToWideChar( CP_ACP, 0, line.c_str(), -1, pwcharText, dwCount );

//3
dwCount = WideCharToMultiByte( CP_UTF8, 0, pwcharText, -1, NULL, 0, NULL, NULL );
char *pText;
pText = new char[ dwCount ];

//4
WideCharToMultiByte( CP_UTF8, 0, pwcharText, -1, pText, dwCount, NULL, NULL );

fprintf(pOutputFile,pText);
fprintf(pOutputFile,"\n");

delete[] pwcharText;
delete[] pText;
}
}

// ...

不幸的是,编码仍然是 ANSI。我搜索了一段时间的解决方案,但我总是通过 MultiByteToWideChar 和 WideCharToMultiByte 遇到解决方案。但是,这似乎不起作用。我在这里缺少什么?

我也在 SO 上寻找解决方案,但大多数 UTF8 问题都与 C# 和 php 相关。

最佳答案

在 VC++2010 中的 Windows 上,可以(据我所知尚未在 GCC 中实现)使用本地化方面 std::codecvt_utf8_utf16(即在 C++11 中)。来自 cppreference.com 的示例代码具有读/写 UTF-8 文件所需的所有基本信息。

std::wstring wFromFile = _T("𤭢teststring");
std::wofstream fileOut("textOut.txt");
fileOut.imbue(std::locale(fileOut.getloc(), new std::codecvt_utf8_utf16<wchar_t>));
fileOut<<wFromFile;

它将 ANSI 编码文件设置为 UTF-8(在记事本中选中)。希望这就是您所需要的。

关于c++ - C++中如何设置文件编码格式为UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11646368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com