扩展我对你上一个问题的回答,这是一个用于编写文件的C库解决方案。我将源代码保存为UTF-8格式,并使用Microsoft的"cl /EHsc /W4 /utf-8 test.cpp"编译。
#include <fcntl.h>
#include <io.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
_setmode(_fileno(stdout), _O_WTEXT);
_setmode(_fileno(stdin), _O_WTEXT);
wstring s = L"こんにちは, 世界!\nHello, World!";
wcout << s << endl;
wstring test;
getline(wcin, test);
wcout << test << endl;
FILE *dest = fopen("out.txt", "w, ccs=UTF-16LE");
fwprintf(dest, L"%s", test.c_str());
return 0;
}
输出(控制台):
C:\>test
こんにちは, 世界!
Hello, World!
你好,马克!
你好,马克!
C:\>type out.txt
你好,马克!
文件内容的十六进制转储,显示UTF-16LE带BOM编码:
ff fe 60 4f 7d 59 0c ff 6c 9a 4b 51 01 ff
cmd
会话中运行它,并且仅知道他正在键入日语。他期望wcin
可以“正常工作”(这不是一个不合理的期望...) - einpoklumgetline(wcin, text)
之后,text
是否包含正确的字符? - rustyxtext
包含了我键入的字符,在英语、日语和俄语中工作正常,只是文件本身不包含它们。 - Guilherme Galdino