使用 ofstream 写入 txt 文件时强制编码

Posted

技术标签:

【中文标题】使用 ofstream 写入 txt 文件时强制编码【英文标题】:Force encoding when writing txt file with ofstream 【发布时间】:2011-09-08 14:54:24 【问题描述】:

我使用 ofstream 编写了一个 txt 文件,由于各种原因,该文件应该具有本地编码而不是 UTF8。 处理文件的机器与目标本地有不同的本地化。

有没有办法在写入文件时强制编码?

问候,

宜兰

【问题讨论】:

【参考方案1】:

您可以在 ofstream 对象上调用 std::ios::imbue 来修改语言环境。这不会影响全局语言环境。

std::ofstream os("output.txt");
std::locale mylocale(""); 
os.imbue(mylocale);
os << 1.5f << std::endl;
os.close();

注意std::locale构造函数的参数,它是依赖于实现的。例如,德语语言环境可能是:

std::locale mylocale("de_DE"); 

std::locale mylocale("German"); 

【讨论】:

【参考方案2】:

好吧,鉴于它是 Windows,反正你不会有 UTF8。但你到底在写什么?通常,您在内存中有一个std::string 并将其写入磁盘。唯一的区别是内存中的\n 被转换为磁盘上的CR/LF (\r\n)。到处都是一样的翻译。

您可能会遇到写std::wstring 的情况。在这种情况下,它由语言环境决定。默认语言环境是 C 语言环境,也就是 std::locale("C") orstd::locale::classic(). The local encoding (which you seem to want) isstd::locale("")`。

存在其他语言环境;见here

【讨论】:

Windows 从 2000 年开始使用 UTF16,但使用 UTF8 没有问题。

以上是关于使用 ofstream 写入 txt 文件时强制编码的主要内容,如果未能解决你的问题,请参考以下文章

C++ ofstream向文件写数据?

如何在 C++ 中找到从 ofstream 创建的文件的目录路径?

使用 ofstream 将文本写入文件末尾

使用 ofstream 将数据写入其文件后更新 ifstream 对象

std::ofstream,写入前检查文件是不是存在

std::ofstream,写入前检查文件是不是存在