Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перекодировка символов  (Прочитано 6922 раз)
0 Пользователей и 1 Гость смотрят эту тему.
speed0ver
Гость
« : 07-08-2008 13:48 » 

У меня такая проблема:
вот код
Код: (C++)
JNIEXPORT jboolean JNICALL Java_isImage
  (JNIEnv * env, jobject obj, jstring file)
{
        const char * filename = env->GetStringUTFChars(file, NULL);
        return theApp.isImage(filename);
}
из Java передаю строку в MFC DLL, затем стандартными функциями получаю строку типа const char* и вызываю функцию, которая должна прочитать файл, путь к которому содержится в строке. Все работает, пока не появляется в пути каталог или файл с русскими буквами. Пробовал отобразить строку с помощью AfxMessageBox, отображаются кракозябры.
Расскажите, как мне перекодировать строку, чтобы C++ ее понимал.
Прбовал так:
Код: (C++)
WCHAR wszFilename[400];
char* fname=new char[400];
int res=MultiByteToWideChar( CP_UTF8, 0, filename,
        strlen(filename)+1, wszFilename, sizeof(wszFilename)/sizeof(wszFilename[0]) );
AfxMessageBox(wszFilename);
WideCharToMultiByte(866,0,wszFilename,-1,fname,400,NULL,NULL);
AfxMessageBox(fname);
В этом случае первый AfxMessageBox показывает правильную строку, а второй - просто квадратики.

Подскажите, что делать.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 07-08-2008 15:31 » 

А ты не можешь без кода сказать что ты хочешь? В каком случае у тебя юникодная строка, а в каком анси и что ты хочешь в конечном итоге получить?

Всё ещё будет зависеть от того как MFC DL скомпилирована? В юникоде или нет?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #2 : 07-08-2008 15:35 » new

Да, кстати, если под виндой, то уж никак не ДОСовскую кодировку - 866. Под виндой русская - 1251
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines