TextMeshProから文字列を取得する際の注意事項。

何が起こったか

ちょっとライブコーディング用のツールを作っているのですが、以下の事象に遭遇しました。

  • TextMeshProから文字列取得した
  • 取得した文字列を別の言語でコンパイルしてみたところ謎のエラー発生
  • エラーの中身を見ると、文字列に何らかの終端文字のようなものが埋め込まれている模様
  • Stringに対し特定の文字除去の処理を行ってみても処理されないため、値格納後の除去も困難

原因・状況の調査

文字列がどんなものであるか、以下のコードを使って検証してみました。
(UnityEditorのコピペではうまく取得できなかったので、メモリから引っこ抜く形で対応)

string tst;//取得した文字列を格納する変数。適当に値を詰め込んで下さい。
foreach (char c in tst ) {
    int    intVal = Convert.ToInt32( c );
    string outStr = String.Format("{0:X2}", intVal );
    Debug.Log(outStr);
}

上記のコードで、取得した文字列を16進数に変換します。
これで消せる文字列かどうか、どういう種類かもわかるわけですね。

結果としては、「200b」なんて文字が入っておりました。
これは、幅ゼロのスペースらしいです。
下記リンクに記載があります。

ゼロ幅スペース – Wikipedia

解決策

【TextMeshPro】入力文字列をTMP_InputField経由でなくTextMeshProUGUIを直接参照して取得してしまったばかりにゼロ幅スペースで苦しんだ記録 – 女子高生になりたい (hatenablog.jp)

TextMeshProGUIではなく、TMP_InputFieldのtextプロパティから取得すると、
ゼロ幅スペースがなくなる模様。

この方法で自分のところでもエラーが消えました。