имеется код для попытки освоения чтения и записи файлов в Юникоде:
wchar_t* tmp=L"TEST STRING РУССКИЙ";
size_t Wlen=wcslen(tmp);//Получаем длину строки WCHAR
iconv_t CD=iconv_open("UTF-8","WCHAR_T");//создаём дескриптор перекодировки
сhar* ic_in=(char*)tmp;//Приводим аргумент к указателю нужного типа.
size_t ic_in_bytes = (Wlen + 1) * sizeof(wchar_t);
void* BA=malloc(50);//Делаем буфер TODO: выяснить с предрасчётом длинны буфера, либо реализовать конверсию кусками если она так работает
char* buff=(char*)BA;
if ((iconv_t) -1 == CD) {
perror("iconv_open");
return EXIT_FAILURE;
}
size_t ic_out_bytes=50; //Указал длинну буфера TODO: проверить вылезет ли сама за нее
size_t Ret=iconv(CD, &ic_in, &ic_in_bytes, &buff, &ic_out_bytes);
if ((size_t) -1 == Ret) {
perror("iconv");
return EXIT_FAILURE;
}
printf( "WLen: %u\n", Wlen);
printf( "Ret: %u\n", ic_out_bytes);
//Пишем
File.open("t.txt",std::fstream::out);
File.write((char*)tmp,50);
File.close();
free (BA);//Чистим
return 0;
Вопрос почему ? и где я затупил ?
Вопрос второй , моя идея работать с текстом как с массивом wchar_t она адекватна ? или есть более нормальный способ? просто у меня по идее на входе текст может быть и в виндовой кодировке и в чем боженька пошлёт. Ну и последний вопрос , средства определения кодировки имеются ?
p.s. прошу обратить внимание что я форточник, так что с линками и с примерами ПЖСТ