Это русская секция форума wxWidjets. В этой секции вы можете обсуждать любые вопросы, связанные с wxWidgets на вашем родном языке.
-
cutecode
- Super wx Problem Solver
- Posts: 427
- Joined: Fri Dec 09, 2016 7:28 am
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
‘Ёв ЄбЁзҐбЄ п ®иЁЎЄ ў Ё¬ҐЁ д ©« , Ё¬ҐЁ Ї ЇЄЁ Ё«Ё ¬ҐвЄҐ ⮬ .
-
Kvaz1r
- Super wx Problem Solver
- Posts: 357
- Joined: Tue Jun 07, 2016 1:07 pm
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:
-
cutecode
- Super wx Problem Solver
- Posts: 427
- Joined: Fri Dec 09, 2016 7:28 am
Post
by cutecode »
Спасибо, Братан, выручил
Я так сделал
Code: Select all
wxFile file(tmp);
wxString buffer;
wxCSConv conv(wxT("cp866"));
if (conv.IsOk())
{
file.ReadAll(&buffer, conv);
wxMessageBox(buffer);
}