как записать русский текст в файл?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Luch
Сообщения: 15
Зарегистрирован: 08 фев 2007, 17:53

нужно записать текст из строки в файл. но текст может быть русским. как это сделать?(CStdioFile)
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

в чём проблема? что не работает?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Luch
Сообщения: 15
Зарегистрирован: 08 фев 2007, 17:53

ну для того чтоб можно было записать русский текст нужно как то там поменят кодировку или ещё что то такое. так вот мне нужно узнать как это сделать.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Попробуй сначала просто записать русский текст в файл. Если возникнет проблема, тогда пиши сюда :) А то получается, что ты где-то слышал, что когда-то кто-то сталкивался с проблемой кодировки и потому даже не пытаешься попробывать сделать обычный write :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Luch
Сообщения: 15
Зарегистрирован: 08 фев 2007, 17:53

блин да если бы я не столкнулся с проблемой я бы не спрашивал.
естесно я попробовал. и он вместо русского текста пишет абсолютно ничего. получаеться пустой файл.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ничего себе. Всегда думал, что проблемы с кодировкой порождают иероглифы, вместо определенного диапазона символов. А у тебя вообще ничего не записывается. Круто. Подозреваю, что просто не правильно используешь методы класса. Советы такие.

1. Попробуй заменить русский текст на английский, более ничего в коде не трогая. Пишет?
2. Если пишет, то кидай сюда кусок кода, где объект типа CStdioFile создаётся, инициализируется и происходит запись, посредством его методов. Будем разбираться.

А вообще самое правльное в таком случае - подэбажить внутрь метода WriteString (надеюсь используешь именно его) и посмотреть что там происходит.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Luch
Сообщения: 15
Зарегистрирован: 08 фев 2007, 17:53

1 с англ. текстом пашет.
2
CStdioFile f;
f.Open(L"E:\\курсовик\\HWM\\debug\\Files\\print.hwm", CFile::modeCreate|CFile::modeWrite);
f.WriteString(print);

в строке print все хорошо. тоесть проблема именно с русскими символами. в строке они хранятся а вот в файл не записываются.
попробую попозже под дебагом посмотреть внутри WriteString только знать бы ещё что смотреть...
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Смотреть следует каждый параметр, который учавствует в каждом операторе . Наверняка очень быстро обнаружишь ошибку. Кстати, print, это что? Какого типа переменная? Дело может быть именно в ней, следовательно особенное внимание удели тому, как происходит передача параметра в метод WriteString.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Luch
Сообщения: 15
Зарегистрирован: 08 фев 2007, 17:53

print это CString
Когда писал проги в консоле мы использовали функцию CharToOem для вывода русского текста с помощью cout
здесь попробовал. она работает но возвращает непонятные символы. короче не знаю что делать. Может кто сталкивался с проблемой.... подскажите...
licenok
Сообщения: 14
Зарегистрирован: 25 авг 2010, 17:08

Код: Выделить всё

#include <locale.h>

LPCTSTR lpsz = _wsetlocale(LC_CTYPE , _T("rus"));
      if (!lpsz)
        AfxMessageBox(L"error set russian .. ");
проверено, работает 100%
Ответить