Programmatically generate SVG (vector) images, animations, and interactive Jupyter widgets

Use explicit UTF-8 string encoding (#65)

Changed files
+5 -5
drawSvg
+4 -4
drawSvg/drawing.py
···
outputFile.write(endStr)
if returnString:
return outputFile.getvalue()
-
def saveSvg(self, fname):
-
with open(fname, 'w') as f:
self.asSvg(outputFile=f)
def savePng(self, fname):
self.rasterize(toFile=fname)
···
if self.displayInline:
return None
prefix = b'data:image/svg+xml;base64,'
-
data = base64.b64encode(self.asSvg().encode())
-
src = (prefix+data).decode()
return '<img src="{}">'.format(src)
def asDataUri(self, strip_chars=STRIP_CHARS):
''' Returns a data URI with base64 encoding. '''
···
outputFile.write(endStr)
if returnString:
return outputFile.getvalue()
+
def saveSvg(self, fname, encoding='utf-8'):
+
with open(fname, 'w', encoding=encoding) as f:
self.asSvg(outputFile=f)
def savePng(self, fname):
self.rasterize(toFile=fname)
···
if self.displayInline:
return None
prefix = b'data:image/svg+xml;base64,'
+
data = base64.b64encode(self.asSvg().encode(encoding='utf-8'))
+
src = (prefix+data).decode(encoding='ascii')
return '<img src="{}">'.format(src)
def asDataUri(self, strip_chars=STRIP_CHARS):
''' Returns a data URI with base64 encoding. '''
+1 -1
drawSvg/elements.py
···
if not embed:
uri = path
else:
-
encData = base64.b64encode(data).decode()
uri = 'data:{};base64,{}'.format(mimeType, encData)
super().__init__(x=x, y=-y-height, width=width, height=height,
xlink__href=uri, **kwargs)
···
if not embed:
uri = path
else:
+
encData = base64.b64encode(data).decode(encoding='ascii')
uri = 'data:{};base64,{}'.format(mimeType, encData)
super().__init__(x=x, y=-y-height, width=width, height=height,
xlink__href=uri, **kwargs)