我正在使用ccs = encoding(如MSDN中所述)在使用fopen打开文件时将编码设置为UTF-8。
写入文件时,它可以正常工作
wchar_t* unicode_text = L"こんにちは";
FILE* f = fopen("C:\\test.txt", "w,ccs=UTF-8");
fwprintf(f, L"%s\n", unicode_text);
fclose(f);
当我在文本编辑器中打开文件时,unicode会显示它应该显示的内容。 但是当尝试从创建的文件中读取时,未检测到UTF-8编码:
wchar_t buffer[1000];
FILE* f = fopen("C:\\test.txt", "r,ccs=UTF-8");
fgetws(buffer, 1000, f);
fclose(f);
MessageBoxW(0, buffer, 0, 0);
这在消息框中显示“ï»ãããããã”。
为什么会这样? ccs = UTF-8仅在打开文件时有效吗?
答案 0 :(得分:2)
文档暗示UTF-8编码仅适用于写作(强调我的):
在Visual C ++ 2005中,fopen支持Unicode文件流。当打开新文件或覆盖现有文件时,可以将指定所需编码的标记传递给fopen,如下所示:
请注意,“读取现有文件”显然不存在。
答案 1 :(得分:1)
试试这个
#include <locale.h>
setlocale(LC_ALL, "Japanese");
答案 2 :(得分:0)
答案 3 :(得分:0)
这可能就像剥离文本的BOM一样简单。看起来在文本框中显示的前三个字符(“”)是UTF-8文件的BOM:
http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding