Skip to content
This repository has been archived by the owner on Jul 21, 2019. It is now read-only.

Commit

Permalink
fix utf-16-le encoding
Browse files Browse the repository at this point in the history
  • Loading branch information
ousttrue committed May 17, 2012
1 parent c44f72f commit 61b4d0a
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 9 deletions.
2 changes: 1 addition & 1 deletion pymeshio/pmx/reader.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def get_read_text(self, text_encoding):
if text_encoding==0: if text_encoding==0:
def read_text(): def read_text():
size=self.read_int(4) size=self.read_int(4)
return self.unpack("{0}s".format(size), size).decode("UTF16") return self.unpack("{0}s".format(size), size).decode("UTF-16-le")
return read_text return read_text
elif text_encoding==1: elif text_encoding==1:
def read_text(): def read_text():
Expand Down
12 changes: 7 additions & 5 deletions pymeshio/pmx/writer.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -17,9 +17,12 @@ def __init__(self, ios,
super(Writer, self).__init__(ios) super(Writer, self).__init__(ios)
if text_encoding==0: if text_encoding==0:
def write_text(unicode): def write_text(unicode):
utf16=unicode.encode('utf16') if not unicode:
self.write_int(len(utf16), 4) self.write_int(0, 4)
self.write_bytes(utf16) else:
utf16=unicode.encode('utf-16-le')
self.write_int(len(utf16), 4)
self.write_bytes(utf16)
self.write_text=write_text self.write_text=write_text
elif text_encoding==1: elif text_encoding==1:
def write_text(unicode): def write_text(unicode):
Expand Down Expand Up @@ -259,7 +262,7 @@ def write_joints(self, joints):
self.write_vector3(j.spring_constant_rotation) self.write_vector3(j.spring_constant_rotation)




def write(ios, model, text_encoding=1): def write(ios, model, text_encoding=0):
""" """
write model to ios. write model to ios.
Expand All @@ -270,7 +273,6 @@ def write(ios, model, text_encoding=1):
pmx model pmx model
text_encoding text_encoding
text field encoding (0: UTF16, 1:UTF-8). text field encoding (0: UTF16, 1:UTF-8).
0: UTF16 has bug. it write BOM(FFFE).
>>> import pymeshio.pmx.writer >>> import pymeshio.pmx.writer
>>> pymeshio.pmx.writer.write(io.open('out.pmx', 'wb'), pmx_model) >>> pymeshio.pmx.writer.write(io.open('out.pmx', 'wb'), pmx_model)
Expand Down
6 changes: 3 additions & 3 deletions test/export_pmx_test.py
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ def setUp(self):
def test_exported_diff(self): def test_exported_diff(self):
# convert # convert
pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE) pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE)
exported=pymeshio.pmx.reader.read_from_file(EXPORT_PMX_FILE) #exported=pymeshio.pmx.reader.read_from_file(EXPORT_PMX_FILE)


# validate # validate
pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE) pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE)
# check diffference # check diffference
pmx.diff(exported) #pmx.diff(exported)
#self.assertEqual(pmx, exported) #self.assertEqual(pmx, exported)
pymeshio.pmx.writer.write(io.open("tmp.pmx", "wb"), exported) #pymeshio.pmx.writer.write(io.open("tmp.pmx", "wb"), exported)


0 comments on commit 61b4d0a

Please sign in to comment.