From 41d1d58eb996de78020c309f34811d8c28d2408a Mon Sep 17 00:00:00 2001 From: Viktor Kovacs Date: Mon, 29 Mar 2021 15:23:09 +0200 Subject: [PATCH] Write utf-8 encoded json in binary gltf. --- source/export/exportergltf.js | 9 ++++----- source/io/bufferutils.js | 6 ++++++ test/tests/io_test.js | 9 +++++++++ 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/source/export/exportergltf.js b/source/export/exportergltf.js index 5b3d6fc..709a489 100644 --- a/source/export/exportergltf.js +++ b/source/export/exportergltf.js @@ -137,8 +137,9 @@ OV.ExporterGltf = class extends OV.ExporterBase }); let mainJsonString = JSON.stringify (mainJson); - let mainJsonBufferLength = mainJsonString.length; - let mainJsonBufferAlignedLength = AlignToBoundary (mainJsonString.length); + let mainJsonBuffer = OV.Utf8StringToArrayBuffer (mainJsonString); + let mainJsonBufferLength = mainJsonBuffer.byteLength; + let mainJsonBufferAlignedLength = AlignToBoundary (mainJsonBufferLength); let glbSize = 12 + 8 + mainJsonBufferAlignedLength + 8 + mainBinaryBufferAlignedLength; let glbWriter = new OV.BinaryWriter (glbSize, true); @@ -149,9 +150,7 @@ OV.ExporterGltf = class extends OV.ExporterBase glbWriter.WriteUnsignedInteger32 (mainJsonBufferAlignedLength); glbWriter.WriteUnsignedInteger32 (0x4E4F534A); - for (let i = 0; i < mainJsonBufferLength; i++) { - glbWriter.WriteUnsignedCharacter8 (mainJsonString.charCodeAt (i)); - } + glbWriter.WriteArrayBuffer (mainJsonBuffer); WriteCharacters (glbWriter, 32, mainJsonBufferAlignedLength - mainJsonBufferLength); glbWriter.WriteUnsignedInteger32 (mainBinaryBufferAlignedLength); diff --git a/source/io/bufferutils.js b/source/io/bufferutils.js index 17965e5..502999e 100644 --- a/source/io/bufferutils.js +++ b/source/io/bufferutils.js @@ -24,6 +24,12 @@ OV.AsciiStringToArrayBuffer = function (str) return buffer; }; +OV.Utf8StringToArrayBuffer = function (str) +{ + let encoder = new TextEncoder (); + return encoder.encode (str); +}; + OV.Base64DataURIToArrayBuffer = function (uri) { let dataPrefix = 'data:'; diff --git a/test/tests/io_test.js b/test/tests/io_test.js index a97d1de..9036397 100644 --- a/test/tests/io_test.js +++ b/test/tests/io_test.js @@ -89,4 +89,13 @@ describe ('IO Test', function () { assert.strictEqual (reader.ReadFloat32 (), 7.5); assert.strictEqual (reader.ReadDouble64 (), 8.5); }); + + it ('Utf8 Conversion', function () { + let str = 'example-\u2764-example'; + let buffer = OV.Utf8StringToArrayBuffer (str); + assert.strictEqual (buffer.byteLength, 19); + let str2 = OV.ArrayBufferToUtf8String (buffer); + assert.strictEqual (str, str2); + assert.strictEqual (str.length, str2.length); + }); });