> Did you look at the iconv API? > I didn't know about that, but I was hoping to avoid things like it. After another hour of stuffing around and reading the fine print of the old C library functions <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/fopen-s-wfopen-s?view=msvc-160> I found this works:
FILE* file; _wfopen_s(&file, L"K:\\temp\\temp-utf8.txt", L"r, ccs=UTF-8") wchar_t buff[128]; fgetws(buff, 128, file) wprintf_s(buff); No wonder I missed that subtle parameter change. The file's BOM is silently consumed and I just get back wide strings terminated by \n\0. Here's a copy of a watch value of a line: 0x00d3fadc L"Greek = ΑΒΓΔ\n" *Greg K* P.S. I'm still not sure that the 128 length in the code is correct. Is it 128 wide or 256 bytes? (what a mess) P.P.S. I can't figure out how to display Unicode characters on the DOS console. I tried chcp 65001 and changing to different TT fonts, but nothing works.