Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > fwprintf и русский текст


Автор: Alca 3.11.2010, 18:24
Работаю с юникодом.

Код

#include <windows.h>
#include <tchar.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <assert.h>
//---------------------------------------------------------------------------
BOOL bLogAppend(LPCTSTR pcszFilePath, LPCTSTR pcszText) {
    assert(NULL != pcszFilePath);
    assert(NULL != pcszText);

    _tsetlocale(LC_ALL, _T(""));

    FILE *pFile = _tfopen(pcszFilePath, _T("a"));
    assert(NULL != pFile);

    _ftprintf(pFile, _T("%s"), pcszText);

    fclose(pFile);    

    return TRUE;
}
//---------------------------------------------------------------------------
INT _tmain(INT argc, TCHAR *argv[]) {
    BOOL bRes = FALSE;

    bRes = bLogAppend(_T("C:\\Test.log"), _T("Операция успешно завершена."));
    assert(FALSE != bRes);

    return 0;
}
//---------------------------------------------------------------------------



Без установки текущей локали (VC++ 2008):
Код

???????? ??????? ????????? 


С установкой текущей локали (VC++ 2008):
Код

Операция успешно завершена.


С установкой текущей локали, текст получается в DOS-кодировке (C++Builder 2010):
Код

ЋЇҐа жЁп гбЇҐи­® § ўҐа襭 .


Как правильно надо сделать?

Автор: bsa 5.11.2010, 00:48
Цитата(Alca @  3.11.2010,  19:24 Найти цитируемый пост)
Как правильно надо сделать?

писать по-английски... Или сменить ОС на *nix.
Остальные варианты - перекодирование вручную.

Автор: ИванМ 6.11.2010, 21:58
Цитата(bsa @  5.11.2010,  00:48 Найти цитируемый пост)
писать по-английски... Или сменить ОС на *nix.

Достаточно сменить компилятор. ОС не всегда целесообразно менять.

Добавлено через 55 секунд
В С++ Builder'е придется WinAPI использовать.

Автор: Alca 7.11.2010, 11:31
Вы бы еще предложили сменить место жительства.

Цитата

В С++ Builder'е придется WinAPI использовать.

Например?

Автор: mrbrooks 8.11.2010, 09:32
Цитата(Alca @  3.11.2010,  18:24 Найти цитируемый пост)
С установкой текущей локали, текст получается в DOS-кодировке (C++Builder 2010):
Цитата

ЋЇҐа жЁп гбЇҐи­® § ўҐа襭 .

Как правильно надо сделать?

дык в дебилдере всегда были косяки с локализацией консоли. думаю с ними он и помрет smile


Цитата(Alca @  7.11.2010,  11:31 Найти цитируемый пост)
Например? 

Если юникод - то что то типа OemToCharW. 

Автор: Noubpoeno 10.12.2022, 05:05
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)