fix unicode problems for python3

This commit is contained in:
looooo
2018-01-07 15:25:56 +01:00
committed by wmayer
parent 7e6dcb45fd
commit bdbae7a3fe
4 changed files with 41 additions and 30 deletions

View File

@@ -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"),

View File

@@ -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):

View File

@@ -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:

View File

@@ -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