Я пытаюсь написать wstring в файл UTF-8 с помощью функции WriteFile. Я хочу, чтобы в файле были эти символы «ÑÁ», но я получаю это « ».C++ WriteFile unicode characters
Вот код
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <string>
#include <fstream>
#include <windows.h>
#include <wchar.h>
#include <stdio.h>
#include <winbase.h>
using namespace std;
const char filepath [] = "unicode.txt";
int main()
{
wstring str;
str.append(L"ÑÁ");
wchar_t* wfilepath;
// Create a file to work with Unicode and UTF-8
ofstream fs;
fs.open(filepath, ios::out|ios::binary);
unsigned char smarker[3];
smarker[0] = 0xEF;
smarker[1] = 0xBB;
smarker[2] = 0xBF;
fs << smarker;
fs.close();
//Open and write in the file with windows functions
mbstowcs(wfilepath, filepath, strlen(filepath));
HANDLE hfile;
hfile = CreateFileW(TEXT(wfilepath), GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
wstringbuf strBuf (str, ios_base::out|ios::app);
DWORD bytesWritten;
DWORD dwBytesToWrite = (DWORD) strBuf.in_avail();
WriteFile(hfile, &strBuf, dwBytesToWrite, &bytesWritten, NULL);
CloseHandle(hfile);
}
Я скомпилировать его Cygwin с помощью этой командной строки:
g++ -std=c++11 -g Windows.C -o Windows
Кстати, вам не нужно использовать венгерскую нотацию, потому что Microsoft делает. Компилятор не заботится о написании идентификаторов; только то, что имена соответствуют правилам языка C++. –
@ThomasMatthews: даже MS не использует (anti-) венгерскую нотацию. Их рекомендации по именованию .NET говорят ** НЕ используйте венгерскую нотацию. ** – DanielKO
Прочтите http://utf8everywhere.org, чтобы узнать, как конвертировать файлы в UTF-8. –