Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Считывание из файла с включенным юникодом 
:(
    Опции темы
Agentx86
Дата 3.6.2009, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть такой кусок кода
Код

CString str;
    CFileDialog fd(true);
    if (fd.DoModal()==IDOK) 
    { 
        char path[255];
    wsprintf(path,_T("%s"),fd.GetPathName());

CStdioFile myfile;
myfile.Open( (LPCTSTR)path, CFile::modeRead  , 0 );
myfile.ReadString(str);
    }

С включенным юникодом русский язык считывается из файла некорректно. Как можно получить нормальный текст без выключения юникода?

Это сообщение отредактировал(а) Agentx86 - 3.6.2009, 01:38
PM MAIL   Вверх
Andrey44
Дата 3.6.2009, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Код

char path[255];
wsprintf(path,_T("%s"),fd.GetPathName());

Это что-то очень интересное! Это у вас работает? И файл открывается?
Функция wsprintf выглядит вот так:
Код

int wsprintf(          LPTSTR lpOut, LPCTSTR lpFmt,  ...       );

И первый параметр у нее никак не char, если у вас включен юникод.
char замените на TCHAR и все должно заработать.

Цитата(Agentx86 @  3.6.2009,  01:37 Найти цитируемый пост)
С включенным юникодом русский язык считывается из файла некорректно.

Где он включен?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Rififi
Дата 3.6.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

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



Код
wsprintf(path,_T("%s"),fd.GetPathName());
CStdioFile myfile;
myfile.Open( (LPCTSTR)path, CFile::modeRead  , 0 );

непонятно, как эта кривулька вообще работатет.
если не знаешь что такое юникод и как его использовать в программе, лучше пока его не используй.


Это сообщение отредактировал(а) Rififi - 3.6.2009, 08:05
PM MAIL   Вверх
Alca
Дата 3.6.2009, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



Цитата

(LPCTSTR)path

Так низя.

Добавлено через 48 секунд
http://forum.vingrad.ru/forum/topic-261722.html


--------------------
PM WWW ICQ Skype Jabber   Вверх
Agentx86
Дата 3.6.2009, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не могу понять в, чем проблема. переделал wsprintf так написано здесь. Все зарабатало в толькочто созданной программе на mfc. А вот в моем проекте не работает. Мистика какаето. Может ктото посоветует, что нужно проверить в настройках. Код один и тотже. Открываю один и тотже файл. В одной проге все нормално во второй абракарабра.
PM MAIL   Вверх
Andrey44
Дата 3.6.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



А не лучше-ли сделать так:
Код

CString str;
CFileDialog fd(true);
if (fd.DoModal()==IDOK) 
{ 
   CStdioFile myfile;
   myfile.Open( fd.GetPathName(), CFile::modeRead  , 0 );
   myfile.ReadString(str);
}



--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Agentx86
Дата 3.6.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Andrey44 @  3.6.2009,  12:34 Найти цитируемый пост)
CString str;
CFileDialog fd(true);
if (fd.DoModal()==IDOK) 
{ 
   CStdioFile myfile;
   myfile.Open( fd.GetPathName(), CFile::modeRead  , 0 );
   myfile.ReadString(str);
}


Конечно лучше. Опыта в mfc мало, поэтому через попу делаю. Но тем не менее это мою проблему не решит. Сейчас у меня проблема именно в считывании.
PM MAIL   Вверх
Andrey44
Дата 3.6.2009, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Цитата(Agentx86 @  3.6.2009,  12:39 Найти цитируемый пост)
Сейчас у меня проблема именно в считывании. 

Какая проблема?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Agentx86
Дата 3.6.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Andrey44 @  3.6.2009,  12:41 Найти цитируемый пост)
Какая проблема? 



Вставляю я вот этот код в толькочто созданное приложение на mfc
Код

CString str;
CFileDialog fd(true);
if (fd.DoModal()==IDOK) 
{ 
   CStdioFile myfile;
   myfile.Open( fd.GetPathName(), CFile::modeRead  , 0 );
   myfile.ReadString(str);
}

Все работает замечательно. Вставляю этотже код в мою прогу. И не работает. Просто у меня приложение довольно большое. На переделывание может уйти часа три четыре. Чтобы заново посоздавать все классы и все окна с контролами. Хочу понять в чем у меня проблема. Есть подозрение, что надо гдето, чтото отключить.

Добавлено через 2 минуты и 19 секунд
переменная вместо строки "предложение на русском" хранит "Ïðåäëîæåíèå íà ðóññêîì"
PM MAIL   Вверх
Andrey44
Дата 3.6.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



В настройках проекта юникод включен?


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
Agentx86
Дата 3.6.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Andrey44 @  3.6.2009,  14:24 Найти цитируемый пост)
В настройках проекта юникод включен? 

Конечно включен. Эх, чувствую проект прийдется заново пересоздавать.
PM MAIL   Вверх
Alca
Дата 3.6.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 6
Всего: 50



А мсжбокс тоже такую шнягу выдает?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Agentx86
Дата 3.6.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Alca @  3.6.2009,  16:21 Найти цитируемый пост)
А мсжбокс тоже такую шнягу выдает? 


Угу, выдает. один в один.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




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


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

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