From e80a82d921e8e654c16c103c6c9b8cefbeb52864 Mon Sep 17 00:00:00 2001 From: Rin Date: Wed, 17 Dec 2025 21:10:24 +0800 Subject: [PATCH] fix(stage-ui) patch ModelSettings.validateFiles to support utf-8 (#814) --- .../stage-ui/src/utils/live2d-zip-loader.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/stage-ui/src/utils/live2d-zip-loader.ts b/packages/stage-ui/src/utils/live2d-zip-loader.ts index cd62d9d43..945402950 100644 --- a/packages/stage-ui/src/utils/live2d-zip-loader.ts +++ b/packages/stage-ui/src/utils/live2d-zip-loader.ts @@ -2,7 +2,23 @@ import type { ModelSettings } from 'pixi-live2d-display/cubism4' import JSZip from 'jszip' -import { Cubism4ModelSettings, ZipLoader } from 'pixi-live2d-display/cubism4' +import { Cubism4ModelSettings, ModelSettings as ModelSettingsClass, ZipLoader } from 'pixi-live2d-display/cubism4' + +// TODO: this is a bit hacky, do we have other choice? +// NOTICE: Patch to handle UTF-8 encoded file paths in model settings +const originalValidateFiles = ModelSettingsClass.prototype.validateFiles +ModelSettingsClass.prototype.validateFiles = function (files: string[]): string[] { + const normalizedFiles = files.map((f) => { + try { + return decodeURI(f) + } + catch { + // Not a valid URI, return original string. + return f + } + }) + return originalValidateFiles.call(this, normalizedFiles) +} ZipLoader.zipReader = (data: Blob, _url: string) => JSZip.loadAsync(data)