From bdbae7a3fe92d1f41a835049357500e0c0316bdb Mon Sep 17 00:00:00 2001 From: looooo Date: Sun, 7 Jan 2018 15:25:56 +0100 Subject: [PATCH] fix unicode problems for python3 --- src/Mod/Draft/DraftTools.py | 4 ++- src/Mod/Draft/importDWG.py | 10 +++---- src/Mod/Draft/importDXF.py | 53 +++++++++++++++++++---------------- src/Mod/Image/Gui/Command.cpp | 4 +++ 4 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index e1ba0f341e..745df71acd 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -1787,7 +1787,9 @@ class Text(Creator): for l in self.text: if len(tx) > 1: tx += ',' - tx += '"'+str(unicode(l).encode("utf8"))+'"' #Python3 no more unicode + if sys.version_info.major < 3: + l = unicode(l) + tx += '"'+str(l.encode("utf8"))+'"' #Python3 no more unicode tx += ']' FreeCADGui.addModule("Draft") self.commit(translate("draft","Create Text"), diff --git a/src/Mod/Draft/importDWG.py b/src/Mod/Draft/importDWG.py index 4b0304777b..951e7d5aab 100644 --- a/src/Mod/Draft/importDWG.py +++ b/src/Mod/Draft/importDWG.py @@ -92,7 +92,7 @@ def getTeighaConverter(): def convertToDxf(dwgfilename): "converts a DWG file to DXF" - import os,tempfile,subprocess #import os,tempfile + import os,tempfile,subprocess,sys #import os,tempfile teigha = getTeighaConverter() if teigha: indir = os.path.dirname(dwgfilename) @@ -100,10 +100,10 @@ def convertToDxf(dwgfilename): basename = os.path.basename(dwgfilename) cmdline = '"%s" "%s" "%s" "ACAD2000" "DXF" "0" "1" "%s"' % (teigha, indir, outdir, basename) print("Converting: " + cmdline) - if isinstance(cmdline,unicode): - import sys - encoding = sys.getfilesystemencoding() - cmdline = cmdline.encode(encoding) + if sys.version_info.major < 3: + if isinstance(cmdline,unicode): + encoding = sys.getfilesystemencoding() + cmdline = cmdline.encode(encoding) subprocess.call(cmdline, shell=True) #os.system(cmdline) result = outdir + os.sep + os.path.splitext(basename)[0] + ".dxf" if os.path.exists(result): diff --git a/src/Mod/Draft/importDXF.py b/src/Mod/Draft/importDXF.py index a6604784cc..d39af14a95 100644 --- a/src/Mod/Draft/importDXF.py +++ b/src/Mod/Draft/importDXF.py @@ -128,8 +128,9 @@ Please either enable FreeCAD to download these libraries: Or download these libraries manually, as explained on https://github.com/yorikvanhavre/Draft-dxf-importer To enabled FreeCAD to download these libraries, answer Yes.""") - if not isinstance(message,unicode): - message = message.decode('utf8') + if sys.version_info.major < 3: + if not isinstance(message,unicode): + message = message.decode('utf8') reply = QtGui.QMessageBox.question(None,"",message, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: @@ -1546,9 +1547,10 @@ def open(filename): getDXFlibs() if dxfReader: docname = os.path.splitext(os.path.basename(filename))[0] - if isinstance(docname,unicode): - import sys #workaround since newDocument currently can't handle unicode filenames - docname = docname.encode(sys.getfilesystemencoding()) + if sys.version_info.major < 3 + if isinstance(docname,unicode): + import sys #workaround since newDocument currently can't handle unicode filenames + docname = docname.encode(sys.getfilesystemencoding()) doc = FreeCAD.newDocument(docname) doc.Label = decodeName(docname) processdxf(doc,filename) @@ -1557,9 +1559,10 @@ def open(filename): errorDXFLib(gui) else: docname = os.path.splitext(os.path.basename(filename))[0] - if isinstance(docname,unicode): - import sys #workaround since newDocument currently can't handle unicode filenames - docname = docname.encode(sys.getfilesystemencoding()) + if sys.version_info.major < 3: + if isinstance(docname,unicode): + #workaround since newDocument currently can't handle unicode filenames + docname = docname.encode(sys.getfilesystemencoding()) doc = FreeCAD.newDocument(docname) doc.Label = decodeName(docname) FreeCAD.setActiveDocument(doc.Name) @@ -1578,9 +1581,10 @@ def insert(filename,docname): getDXFlibs() if dxfReader: groupname = os.path.splitext(os.path.basename(filename))[0] - if isinstance(groupname,unicode): - import sys #workaround since newDocument currently can't handle unicode filenames - groupname = groupname.encode(sys.getfilesystemencoding()) + if sys.version_info.major < 3: + if isinstance(groupname,unicode): + #workaround since newDocument currently can't handle unicode filenames + groupname = groupname.encode(sys.getfilesystemencoding()) importgroup = doc.addObject("App::DocumentObjectGroup",groupname) importgroup.Label = decodeName(groupname) processdxf(doc,filename) @@ -1893,16 +1897,17 @@ def writePanelCut(ob,dxf,nospline,lwPoly,parent=None): def getStrGroup(ob): "gets a string version of the group name" l = getGroup(ob) - if isinstance(l,unicode): - # dxf R12 files are rather over-sensitive with utf8... - try: - import unicodedata - except: - # fallback - return l.encode("ascii",errors="replace") - else: - # better encoding, replaces accented latin characters with corrsponding ascii letter - return ''.join((c for c in unicodedata.normalize('NFD', l) if unicodedata.category(c) != 'Mn')).encode("ascii",errors="replace") + if sys.version_info.major < 3: + if isinstance(l,unicode): + # dxf R12 files are rather over-sensitive with utf8... + try: + import unicodedata + except: + # fallback + return l.encode("ascii",errors="replace") + else: + # better encoding, replaces accented latin characters with corrsponding ascii letter + return ''.join((c for c in unicodedata.normalize('NFD', l) if unicodedata.category(c) != 'Mn')).encode("ascii",errors="replace") return l def export(objectslist,filename,nospline=False,lwPoly=False): @@ -2025,9 +2030,9 @@ def export(objectslist,filename,nospline=False,lwPoly=False): pbase = DraftVecUtils.tup(ob.End.add(proj.negative())) dxf.append(dxfLibrary.Dimension(pbase,p1,p2,color=getACI(ob), layer=getStrGroup(ob))) - - if isinstance(filename,unicode): - filename = filename.encode("utf8") + if sys.version_info.major < 3: + if isinstance(filename,unicode): + filename = filename.encode("utf8") dxf.saveas(filename) FreeCAD.Console.PrintMessage("successfully exported "+filename+"\r\n") else: diff --git a/src/Mod/Image/Gui/Command.cpp b/src/Mod/Image/Gui/Command.cpp index 94b66b5810..82a0b90543 100644 --- a/src/Mod/Image/Gui/Command.cpp +++ b/src/Mod/Image/Gui/Command.cpp @@ -78,7 +78,11 @@ void CmdImageOpen::activated(int iMsg) try{ // load the file with the module Command::doCommand(Command::Gui, "import Image, ImageGui"); +#if PY_MAJOR_VERSION < 3 Command::doCommand(Command::Gui, "ImageGui.open(unicode(\"%s\",\"utf-8\"))", (const char*)s.toUtf8()); +#else + Command::doCommand(Command::Gui, "ImageGui.open(\"%s\",\"utf-8\")", (const char*)s.toUtf8()); +#endif } catch (const Base::PyException& e){ // Usually thrown if the file is invalid somehow