Skip to content

Commit 951cc3d

Browse files
author
Ben Cipollini
committed
Make sure xml is encoded as utf-8
1 parent 6fb4ea0 commit 951cc3d

File tree

2 files changed

+23
-22
lines changed

2 files changed

+23
-22
lines changed

nibabel/gifti/gifti.py

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def metadata(self):
5252

5353
def to_xml(self):
5454
if len(self.data) == 0:
55-
return "<MetaData/>\n"
55+
return b"<MetaData/>\n"
5656
res = "<MetaData>\n"
5757
for ele in self.data:
5858
nvpair = """<MD>
@@ -61,7 +61,7 @@ def to_xml(self):
6161
</MD>\n""" % (ele.name, ele.value)
6262
res = res + nvpair
6363
res = res + "</MetaData>\n"
64-
return res
64+
return res.encode('utf-8')
6565

6666
def print_summary(self):
6767
print(self.metadata)
@@ -90,7 +90,7 @@ def get_labels_as_dict(self):
9090

9191
def to_xml(self):
9292
if len(self.labels) == 0:
93-
return "<LabelTable/>\n"
93+
return b"<LabelTable/>\n"
9494
res = "<LabelTable>\n"
9595
for ele in self.labels:
9696
col = ''
@@ -106,7 +106,7 @@ def to_xml(self):
106106
(str(ele.key), col, ele.label)
107107
res = res + lab
108108
res = res + "</LabelTable>\n"
109-
return res
109+
return res.encode('utf-8')
110110

111111
def print_summary(self):
112112
print(self.get_labels_as_dict())
@@ -181,7 +181,7 @@ def __init__(self, dataspace=0, xformspace=0, xform=None):
181181

182182
def to_xml(self):
183183
if self.xform is None:
184-
return "<CoordinateSystemTransformMatrix/>\n"
184+
return b"<CoordinateSystemTransformMatrix/>\n"
185185
res = ("""<CoordinateSystemTransformMatrix>
186186
\t<DataSpace><![CDATA[%s]]></DataSpace>
187187
\t<TransformedSpace><![CDATA[%s]]></TransformedSpace>\n"""
@@ -191,7 +191,7 @@ def to_xml(self):
191191
res += _arr2txt(self.xform, '%10.6f')
192192
res = res + "</MatrixData>\n"
193193
res = res + "</CoordinateSystemTransformMatrix>\n"
194-
return res
194+
return res.encode('utf-8')
195195

196196
def print_summary(self):
197197
print('Dataspace: ', xform_codes.niistring[self.dataspace])
@@ -200,7 +200,8 @@ def print_summary(self):
200200

201201

202202
def data_tag(dataarray, encoding, datatype, ordering):
203-
""" Creates the data tag depending on the required encoding """
203+
""" Creates the data tag depending on the required encoding,
204+
returns as bytes"""
204205
import zlib
205206
ord = array_index_order_codes.npcode[ordering]
206207
enclabel = gifti_encoding_codes.label[encoding]
@@ -215,7 +216,7 @@ def data_tag(dataarray, encoding, datatype, ordering):
215216
raise NotImplementedError("In what format are the external files?")
216217
else:
217218
da = ''
218-
return "<Data>" + da + "</Data>\n"
219+
return ("<Data>" + da + "</Data>\n").encode('utf-8')
219220

220221

221222
class GiftiDataArray(object):
@@ -303,21 +304,21 @@ def to_xml(self):
303304
# fix endianness to machine endianness
304305
self.endian = gifti_endian_codes.code[sys.byteorder]
305306
result = ""
306-
result += self.to_xml_open()
307+
result += self.to_xml_open().decode('utf-8')
307308
# write metadata
308309
if not self.meta is None:
309-
result += self.meta.to_xml()
310+
result += self.meta.to_xml().decode('utf-8')
310311
# write coord sys
311312
if not self.coordsys is None:
312-
result += self.coordsys.to_xml()
313+
result += self.coordsys.to_xml().decode('utf-8')
313314
# write data array depending on the encoding
314315
dt_kind = data_type_codes.dtype[self.datatype].kind
315316
result += data_tag(self.data,
316317
gifti_encoding_codes.specs[self.encoding],
317318
KIND2FMT[dt_kind],
318-
self.ind_ord)
319-
result = result + self.to_xml_close()
320-
return result
319+
self.ind_ord).decode('utf-8')
320+
result = result + self.to_xml_close().decode('utf-8')
321+
return result.encode('utf-8')
321322

322323
def to_xml_open(self):
323324
out = """<DataArray Intent="%s"
@@ -331,7 +332,7 @@ def to_xml_open(self):
331332
di = ""
332333
for i, n in enumerate(self.dims):
333334
di = di + '\tDim%s=\"%s\"\n' % (str(i), str(n))
334-
return out % (intent_codes.niistring[self.intent],
335+
return (out % (intent_codes.niistring[self.intent],
335336
data_type_codes.niistring[self.datatype],
336337
array_index_order_codes.label[self.ind_ord],
337338
str(self.num_dim),
@@ -340,10 +341,10 @@ def to_xml_open(self):
340341
gifti_endian_codes.specs[self.endian],
341342
self.ext_fname,
342343
self.ext_offset,
343-
)
344+
)).encode('utf-8')
344345

345346
def to_xml_close(self):
346-
return "</DataArray>\n"
347+
return b"</DataArray>\n"
347348

348349
def print_summary(self):
349350
print('Intent: ', intent_codes.niistring[self.intent])
@@ -504,10 +505,10 @@ def to_xml(self):
504505
<GIFTI Version="%s" NumberOfDataArrays="%s">\n""" % (self.version,
505506
str(self.numDA))
506507
if not self.meta is None:
507-
res += self.meta.to_xml()
508+
res += self.meta.to_xml().decode('utf-8')
508509
if not self.labeltable is None:
509-
res += self.labeltable.to_xml()
510+
res += self.labeltable.to_xml().decode('utf-8')
510511
for dar in self.darrays:
511-
res += dar.to_xml()
512+
res += dar.to_xml().decode('utf-8')
512513
res += "</GIFTI>"
513-
return res
514+
return res.encode('utf-8')

nibabel/gifti/giftiio.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,5 +80,5 @@ def write(image, filename):
8080
The Gifti file is stored in endian convention of the current machine.
8181
"""
8282
# Our giftis are always utf-8 encoded - see GiftiImage.to_xml
83-
with codecs.open(filename, 'wb', encoding='utf-8') as f:
83+
with open(filename, 'wb') as f:
8484
f.write(image.to_xml())

0 commit comments

Comments
 (0)