crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
AD
  опции профиля:
сообщение 14.3.2008, 14:30
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Так решил создать тему, потому что возникли другие проблемы, не связанные с Qt. В Qt-то все и решилось :)
Короче, fstream file(<string>, <flag>). Если путь к файлу содержит русские названия, то файл не открывается! Как бороться с этим?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 14.3.2008, 15:15
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Какая система?
Откуда получаешь строку с именем файла?
В какой она кодировке?
Почему не использовать Qt-шные классы работы с файлами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 14.3.2008, 18:36
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 14.3.2008, 15:15) *
Какая система?
Откуда получаешь строку с именем файла?
В какой она кодировке?
Почему не использовать Qt-шные классы работы с файлами?

Я полагаю, что кодировка - Win1251! Не использовались Qt-function потому что этот класс был разработан до того, как стал использоваться нами Qt! Переделывать нерационально, но, пока что, еще возможно!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 14.3.2008, 22:01
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Не надо предполагать - нужно знать.
Разберись с кодировками и всё получится. :)

Сообщение отредактировал Tonal - 14.3.2008, 22:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.3.2008, 8:34
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 14.3.2008, 22:01) *
Не надо предполагать - нужно знать.
Разберись с кодировками и всё получится. :)

Кодировка того текста - Win1251! Но это ничего не дало. Где найти ошибку?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.3.2008, 8:46
Сообщение #6


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


А без Qt работает? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.3.2008, 8:54
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 18.3.2008, 8:46) *
А без Qt работает? :)

Причем здесь Qt? Не открывается файл, если в пути русский текст. Я не могу понять из-за чего. file.open(<name>, <flag>);
Кто знает, можете что-нибудь дельное подсказать?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.3.2008, 9:10
Сообщение #8


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Какой компилятор?

Вот этот код у меня нормально отрабатывает:
#include <iostream>
#include <fstream>

using std::cout;
using std::endl;

int main() {
  std::ifstream f("rus_file_проба");
  std::string s;
  while(f) {
    std::getline(f, s);
    cout<<s<<endl;
  }
}

g++ (GCC) 3.4.5 (mingw special)

Сообщение отредактировал Tonal - 18.3.2008, 9:11
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 18.3.2008, 9:18
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Tonal @ 18.3.2008, 9:10) *
Какой компилятор?

Visual Studio 2005, в который встроен Qt.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 18.3.2008, 9:29
Сообщение #10


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Создай новый консольный проект, и попробуй мой код.
Укажи абсолютный путь к файлу.
Если не сработает - значит кривые настройки студии.
Если сработает - ищи, в чём отличия от твоего кода. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 18.3.2008, 15:33
Сообщение #11


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


setlocale( LC_ALL, ".ACP" );
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.3.2008, 12:21
Сообщение #12


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Andrew Selivanov @ 18.3.2008, 15:33) *
setlocale( LC_ALL, ".ACP" );

Указанный Tonal пример пока не пробовал, попробую отвечу.

А все-таки про setlocale можно поподробнее, пожалуйста? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Andrew Selivanov
  опции профиля:
сообщение 19.3.2008, 12:43
Сообщение #13


Участник
**

Группа: Участник
Сообщений: 249
Регистрация: 9.10.2007
Из: Москва
Пользователь №: 3

Спасибо сказали: 15 раз(а)




Репутация:   6  


Коротко: Устанавливает всякие национальные штуки, типа кодировок, используемых функциями, точку или запятую использовать для дробей итп.

Длинно: В Страуструпе это есть, в Гугле тоже :)

Причина проблемы: Походу у тебя установлена не та кодировка для локали, а так ты явно устанавливаешь системную.

http://msdn2.microsoft.com/en-us/library/a...906(VS.60).aspx

If locale is a null pointer, setlocale queries, rather than sets, the international environment, and returns a pointer to the string associated with the specified category. The program’s current locale setting is not changed. For example,
setlocale( LC_ALL, NULL );

returns the string associated with category.

The following examples pertain to the LC_ALL category. Either of the strings ".OCP" and ".ACP" can be used in place of a code page number to specify use of the system default OEM code page and system-default ANSI code page, respectively.

setlocale( LC_ALL, "" );

Sets the locale to the default, which is the system-default ANSI code page obtained from the operating system.

setlocale( LC_ALL, ".OCP" );

Explicitly sets the locale to the current OEM code page obtained from the operating system.
setlocale( LC_ALL, ".ACP" ); // (!)

Sets the locale to the ANSI code page obtained from the operating system.

setlocale( LC_ALL, "[lang_ctry]" );


Сообщение отредактировал Andrew Selivanov - 19.3.2008, 12:44
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 19.3.2008, 12:51
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(Andrew Selivanov @ 19.3.2008, 12:43) *
Коротко: Устанавливает всякие национальные штуки, типа кодировок, используемых функциями, точку или запятую использовать для дробей итп.

Длинно: В Страуструпе это есть, в Гугле тоже :)

Причина проблемы: Походу у тебя установлена не та кодировка для локали, а так ты явно устанавливаешь системную.

http://msdn2.microsoft.com/en-us/library/a...906(VS.60).aspx

Спасибо! поставил так, все заработало! Огромное спасибо! :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V   1 2 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.5.2025, 17:06