DOS string to wxString Topic is solved

Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
Post Reply
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

DOS string to wxString

Post by cutecode »

у меня есть файл в DOS-овской кодировке, со следующим содержимым

Code: Select all

Синтаксическая ошибка в имени файла, имени папки или метке тома.
Как правильно перевести содержимое файла в unicode wxString
делаю так

Code: Select all

			wxFile file(tmp);
			long len = file.Length();
			char* chr = new char[len + 1];
    		
	    	file.Read(chr, len);
		    file.Close();
			*(chr + len) = 0;
			wxString buffer(chr, wxConvWhateverWorks);
			
			if (!buffer.IsEmpty())
			{
				wxMessageBox(buffer.mb_str());
				wxRemoveFile(tmp);
				wxMessageBox(szShell);
				return false;
			}
но вижу кракозябры

Code: Select all

‘Ё­в ЄбЁзҐбЄ п ®иЁЎЄ  ў Ё¬Ґ­Ё д ©« , Ё¬Ґ­Ё Ї ЇЄЁ Ё«Ё ¬ҐвЄҐ ⮬ .
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
Kvaz1r
Super wx Problem Solver
Super wx Problem Solver
Posts: 357
Joined: Tue Jun 07, 2016 1:07 pm

Re: DOS string to wxString

Post by Kvaz1r »

DOS-кодировка это какая? cp866?

Я бы делал так:

Code: Select all

#include <wx/wx.h>
#include <wx/file.h>

class MyFrame : public wxFrame
	{
	public:
		MyFrame() : wxFrame(NULL, wxID_ANY, "Test", wxDefaultPosition, wxSize(600, 400))
			{                                       
			wxBoxSizer* Sizer = new wxBoxSizer( wxVERTICAL );

			m_BTest = new wxButton( this, wxID_ANY, wxT("Test"), wxDefaultPosition, wxDefaultSize, 0 );
			m_BTest->Bind(wxEVT_BUTTON, [&](wxCommandEvent&)
				{
				wxString text;
				wxCSConv conv( wxT( "cp866" ) );
				if (!conv.IsOk())
					{
					wxMessageBox("Не узнаю кодировку \n");
					return;
					}
				wxFileDialog* fileDialog = new wxFileDialog(this);
				if (fileDialog->ShowModal() == wxID_OK)
					{
					wxFile file(fileDialog->GetPath(),wxFile::OpenMode::read);
					if(file.IsOpened())
						{
						file.ReadAll(&text,conv);
						wxMessageBox(text);
						}
					else 
						{
						wxMessageBox("Не могу открыть файл \n");
						}
					}
				fileDialog->Destroy();
				});
			Sizer->Add( m_BTest, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxALIGN_CENTER_HORIZONTAL, 5 );

			this->SetSizer( Sizer );
			this->Layout();
			this->Centre( wxBOTH );
			}
	protected:
		wxButton* m_BTest;

	};

class MyApp : public wxApp
	{
	public:   
		bool OnInit()
			{
			(new MyFrame)->Show();
			return true;
			}
	}; 
wxIMPLEMENT_APP(MyApp);
а при записи в файл конвертировал уже как UTF8:

Code: Select all

file.Write(text,wxMBConvUTF8());
User avatar
cutecode
Super wx Problem Solver
Super wx Problem Solver
Posts: 425
Joined: Fri Dec 09, 2016 7:28 am
Contact:

Re: DOS string to wxString

Post by cutecode »

Спасибо, Братан, выручил

Я так сделал

Code: Select all

	wxFile file(tmp);
	wxString buffer;
	wxCSConv conv(wxT("cp866"));
	if (conv.IsOk())
	{
		file.ReadAll(&buffer, conv);
		wxMessageBox(buffer);
	}
wx 3.1.6 win/mac/linux

regards,
Alexander Saprykin
https://v2.dental-soft.ru
Post Reply