diff --git a/aegisub/src/dialog_style_manager.cpp b/aegisub/src/dialog_style_manager.cpp index 713ac33f7..c112c0a1e 100644 --- a/aegisub/src/dialog_style_manager.cpp +++ b/aegisub/src/dialog_style_manager.cpp @@ -38,6 +38,7 @@ #include "ass_dialogue.h" #include "ass_file.h" #include "ass_style.h" +#include "charset_detect.h" #include "compat.h" #include "dialog_selected_choices.h" #include "dialog_style_editor.h" @@ -565,13 +566,21 @@ void DialogStyleManager::OnCurrentImport() { auto filename = OpenFileSelector(_("Open subtitles file"), "Path/Last/Subtitles", "", "", SubtitleFormat::GetWildcards(0), this); if (filename.empty()) return; + std::string charset; + try { + charset = CharSetDetect::GetEncoding(filename); + } + catch (agi::UserCancelException const&) { + return; + } + AssFile temp; try { auto reader = SubtitleFormat::GetReader(filename); if (!reader) wxMessageBox("Unsupported subtitle format", "Error", wxOK | wxICON_ERROR | wxCENTER, this); else - reader->ReadFile(&temp, filename); + reader->ReadFile(&temp, filename, charset); } catch (agi::Exception const& err) { wxMessageBox(to_wx(err.GetChainedMessage()), "Error", wxOK | wxICON_ERROR | wxCENTER, this); diff --git a/aegisub/src/subtitle_format.h b/aegisub/src/subtitle_format.h index b330d7413..7f0a1ed32 100644 --- a/aegisub/src/subtitle_format.h +++ b/aegisub/src/subtitle_format.h @@ -110,8 +110,8 @@ public: /// Load a subtitle file /// @param[out] target Destination to read lines into /// @param filename File to load - /// @param forceEncoding Encoding to use or empty string for default - virtual void ReadFile(AssFile *target, agi::fs::path const& filename, std::string const& forceEncoding="") const { } + /// @param encoding Encoding to use. May be ignored by the reader. + virtual void ReadFile(AssFile *target, agi::fs::path const& filename, std::string const& encoding) const { } /// Save a subtitle file /// @param src Data to write