c++ - 如何在 C++ 中将 UTF-8 编码的字符串写入 Windows 中的文件

标签 c++ windows unicode file-io utf-8

我有一个字符串,其中可能包含也可能不包含 unicode 字符,我正在尝试将其写入 Windows 上的文件。下面我发布了一段示例代码,我的问题是当我打开并从窗口读取值时,它们都被解释为 UTF-16 字符。

char* x = "Fool";
FILE* outFile = fopen( "Serialize.pef", "w+,ccs=UTF-8");
fwrite(x,strlen(x),1,outFile);
fclose(outFile);

char buffer[12];
buffer[11]=NULL;
outFile = fopen( "Serialize.pef", "r,ccs=UTF-8");
fread(buffer,1,12,outFile);
fclose(outFile);

如果我在写字板等中打开文件,这些字符也会被解释为 UTF-16。我做错了什么?

最佳答案

是的,当您指定文本文件应以 UTF-8 编码时,CRT 隐式假定您将向文件写入 Unicode 文本。不这样做没有意义,您不需要 UTF-8。这将正常工作:

wchar_t* x = L"Fool";
FILE* outFile = fopen( "Serialize.txt", "w+,ccs=UTF-8");
fwrite(x, wcslen(x) * sizeof(wchar_t), 1, outFile);
fclose(outFile);

或者:

char* x = "Fool";
FILE* outFile = fopen( "Serialize.txt", "w+,ccs=UTF-8");
fwprintf(outFile, L"%hs", x);
fclose(outFile);

关于c++ - 如何在 C++ 中将 UTF-8 编码的字符串写入 Windows 中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973582/

相关文章:

Python字符串转换(本地化)问题

c++ - 为什么我的程序在启动前就崩溃了?

windows - 微软的ASLR很奇怪

c# - 为什么 0x00 字符使 System.Diagnostics.Debug.WriteLine 不写入新行?

c++ - 第一次尝试 - 图形程序

windows - boost::random_device 的非 Linux 实现

c++ - CA2W 给了我一个 "' AtlThrowLastWin3 2': identifier not found"错误

c++ - 如何从包含最终情况的函数返回迭代器

c++ - 解释器始终可以使用源代码是什么意思?

c++ - 如何在运行 C++ 应用程序的 GUI 时设置断点购买 GDB