From 511ddfffa1b5b718d0c59e20e89dee86384af0c6 Mon Sep 17 00:00:00 2001 From: wmayer Date: Mon, 24 Sep 2018 22:16:48 +0200 Subject: [PATCH] fixes 0003521: Import of csv file into Spreadsheet does not work if the path contains non ASCII characters --- src/Mod/Spreadsheet/App/Sheet.cpp | 5 ++++- src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp | 10 ++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/Mod/Spreadsheet/App/Sheet.cpp b/src/Mod/Spreadsheet/App/Sheet.cpp index 5b7b986b0f..81afa4f962 100644 --- a/src/Mod/Spreadsheet/App/Sheet.cpp +++ b/src/Mod/Spreadsheet/App/Sheet.cpp @@ -35,8 +35,10 @@ #include #include #include +#include #include #include +#include #include #include #include "Sheet.h" @@ -140,7 +142,8 @@ void Sheet::clearAll() bool Sheet::importFromFile(const std::string &filename, char delimiter, char quoteChar, char escapeChar) { - std::ifstream file; + Base::FileInfo fi(filename); + Base::ifstream file(fi); int row = 0; PropertySheet::AtomicPropertyChange signaller(cells); diff --git a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp index 13eae3bb94..1cd55423b7 100644 --- a/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp +++ b/src/Mod/Spreadsheet/Gui/AppSpreadsheetGui.cpp @@ -73,17 +73,19 @@ public: private: Py::Object open(const Py::Tuple& args) { - const char* Name; + char* Name; const char* DocName=0; - if (!PyArg_ParseTuple(args.ptr(), "s|s",&Name,&DocName)) + if (!PyArg_ParseTuple(args.ptr(), "et|s","utf-8",&Name,&DocName)) throw Py::Exception(); + std::string EncodedName = std::string(Name); + PyMem_Free(Name); try { - Base::FileInfo file(Name); + Base::FileInfo file(EncodedName); App::Document *pcDoc = App::GetApplication().newDocument(DocName ? DocName : QT_TR_NOOP("Unnamed")); Spreadsheet::Sheet *pcSheet = static_cast(pcDoc->addObject("Spreadsheet::Sheet", file.fileNamePure().c_str())); - pcSheet->importFromFile(Name, '\t', '"', '\\'); + pcSheet->importFromFile(EncodedName, '\t', '"', '\\'); pcSheet->execute(); } catch (const Base::Exception& e) {