无法使用fopen(文件“r,ccs = UTF-8”)读取UTF8编码的文件

我正在使用ccs =编码(如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会显示它应该显示的内容。 但是当试图从创build的文件中读取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只在打开文件时有效吗?

该文档意味着UTF-8编码仅适用于书写(强调我的):

在Visual C ++ 2005中,fopen支持Unicode文件流。 指定所需编码的标志可以在打开新文件覆盖现有文件时传递给fopen,如下所示:

请注意,“读取现有的文件”是显着缺席。

尝试这个

 #include <locale.h> setlocale(LC_ALL, "Japanese"); 

看fgets,fgetws

fgetws根据是以文本模式还是二进制模式打开流,将宽字符参数str作为多字节字符串或宽字符字符串读取,

如果你尝试“rb”。

这可能就像从文本中剥离BOM一样简单。 它看起来像在您的文本框中显示的前三个字符(“?”)是UTF-8文件的BOM:

http://en.wikipedia.org/wiki/Byte_order_mark#Representations_of_byte_order_marks_by_encoding