MizunagiKB / gd_cubism

Unofficial Live2D Player for Godot Engine

Home Page:https://mizunagikb.github.io/gd_cubism/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

日本語がファイル名に使用されている場合、正常に読み込まれない

creeper-0910 opened this issue · comments

昨日のPRから(#29)
日本語がファイル名に使用されている場合、正常に読み込まれずプレビュー画面にも表示されません。
エラーは以下のとおりです。(全てのファイル名は「もでる.<拡張子>」に統一されています)
image

@creeper-0910

この不具合は、文字の取り扱いが異なる環境間において GDCubism が正しく文字列を変換出来ていない事に起因して発生しています。

  • Godot Engine が扱う文字型は String(char32_t *)
  • CubismSdkForNative が扱う文字型は char
  • CubismNativeFramework が扱う文字型は csmChar(char), csmString(csmChar *)
  • JSON(JavaScript Object Notation Data Interchange Format) が扱う文字コードは utf-8

#29 で提示された方法を行うと取り扱いが ascii のみで表現可能な範囲に制限されるため、結果的に正しく取り扱う事が出来ます。

例では日本語を挙げていますが、 ascii 範囲外の文字を扱えば全て問題となります。

解決方法の提案

前述した様に文字コードの取り扱いが問題となっているため、以下の様なルールで文字列を処理する様にします。

  • Godot Engine から CubismNativeFramework に文字列を渡すときは、 utf-8(char *) に変換する。
  • CubismNativeFramework から Godot Engine に文字列を渡すときは、 utf-32(char32_t *) に変換する。

具体的なコードで表現すると以下の様なものになります。

// Godot Engine -> CubismNativeFramework
String from;
Csm::csmString to = Csm::csmString(from.utf8().ptr());

// CubismNativeFramework -> Godot Engine
Csm::csmString from;
String to; to.parse_utf8(from.GetRawString());

この不具合対応は #35 で行い、https://github.com/MizunagiKB/gd_cubism/tree/0.3 に取り込まれました。

関連情報

了解しました。対応ありがとうございます!