Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> MS VisualC++ не говорит по русски, при чтении русского текста из файла  
V
    Опции темы
shara
Дата 3.10.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



работаю в Visual C++  при помощи конструктора нарисовал окошко в него вставил элемент типа EditControl, и хочу выводить в нее текст. все вроде бы хорошо, и русский текст понимает если начальное значение строки текста задавать в коде программы.
проблемы начинаются если читать текст из файла(созданного при помощи блокнота) и затем пытаться его вывести

Код

HANDLE hFile;

hFile = CreateFile(_T("d:\\test\\2.txt"), GENERIC_READ, 0,  NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    
    int bResult
    DWORD nBytesRead=0;
        const int N_SIZE=30;
       char rBuf[N_SIZE]="";
    
    bResult = ReadFile(hFile, rBuf, N_SIZE, &nBytesRead, NULL);
    rBuf[N_SIZE]='\0';
      if (!bResult) 
        {
            unsigned long dwError;
            dwError = GetLastError();
                MessageBoxW(_T("Чтения файла"),_T("Ошибка"),MB_OK);
            return(-1);
        } 
     
    std::string s(rBuf);
        wchar_t* w_str = new wchar_t[s.length() + 1]();
        std::copy(s.begin(), s.end(), w_str);
    
    \\ собсно записываем полученый текст в переменную VALUE элемента  EditControl
        out_text.Insert(0,w_str);
        \\\ вместе с тем out_text.Insert(0, _T("это русский текст")); нормально отображается на экране

     UpdateData(false);

     CloseHandle(hFile);


 smile 

Это сообщение отредактировал(а) shara - 3.10.2008, 00:26


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
J0ker
Дата 3.10.2008, 06:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: -1
Всего: 14



Цитата(shara @  3.10.2008,  00:24 Найти цитируемый пост)
проблемы начинаются если читать текст из файла(созданного при помощи блокнота) и затем пытаться его вывести

блокнот по дефолту сохраняет текст как ANSI


--------------------
user posted image
PM MAIL   Вверх
xvr
Дата 3.10.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Вот это 
Код

    std::string s(rBuf);
        wchar_t* w_str = new wchar_t[s.length() + 1]();
        std::copy(s.begin(), s.end(), w_str);
работать не будет. ANSI в UNICODE простым копированием не преобразуется (если только это не чисто английский текст)
См. функцию MultiByteToWideChar
PM MAIL   Вверх
shara
Дата 3.10.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



xvr,
подскажите пожалусто как эту функцию мне использовать в моей программе



пытался понять как она работает из МСДНа - неполучилось 

с типами данных проблемы
Код

BOOL UnicodeToANSI(LPWSTR Wstr,LPSTR Astr)
{
return WideCharToMultiByte(CP_ACP,0,Wstr,-1,Astr,128,NULL,NULL);
}

BOOL ANSI2Unicode(LPSTR Astr,LPWSTR Wstr)
{
return MultiByteToWideChar(CP_ACP,0,Astr,-1,Wstr,128);
}



--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
xvr
Дата 4.10.2008, 08:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(shara @ 3.10.2008,  21:28)
xvr,
подскажите пожалусто как эту функцию мне использовать в моей программе

пытался понять как она работает из МСДНа - неполучилось 
с типами данных проблемы

Типы данных вроде правильные

Код

BOOL UnicodeToANSI(wchar_t* Wstr, char* Astr)
{
return WideCharToMultiByte(CP_ACP,0,Wstr,-1,Astr,128,NULL,NULL)!=0;
}

BOOL ANSI2Unicode(char* Astr,wchar_t* Wstr)
{
return MultiByteToWideChar(CP_ACP,0,Astr,-1,Wstr,128)!=0;
}
Буфера для результирующих строк должны быть заказаны заранее и поданны в эти функции

PM MAIL   Вверх
shara
Дата 4.10.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 344
Регистрация: 29.6.2004
Где: печенье?

Репутация: нет
Всего: 2



получилось  smile    
xvr, агромадное спасиба  smile 


--------------------
   с точки зрения аэродинамики шмель не может летать  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1041 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.