Unicode絵文字について

Issue #336 resolved
暗黒 騎士 created an issue

while(TRUE) さんの新作「αποθηκη」でUnicode6.0追加絵文字「💎」が使われており、
それが自分のPyフォークと2.3以前(Rebootの3.0以降では再現しません)の「メッセージボード」においてのみ文字化けするので原因を調べています。(メッセージの選択肢・テキストセル・シナリオ解説・カード名などでは正常に表示されます)

調べていくうちに「コードポイントが1万以上」のUnicode追加絵文字だけが正しく表示されていない、というのがわかりました。
つまり具体的に言うと⏩ ⏰などは旧Pyでも表示されるのですが、💎🆖などは文字化けします。

その過程で、CWXEditorにおいても同様の現象が確認できました。
「アンチエイリアス無効時のテキストセル(入力欄では正常表示)」「イベントツリー上の選択肢などの文字」です。
色々悩んでみたのですが、OSなどの環境にもよるのか、バグなのか結局自分には判断が付かずご相談にあがった次第です。

↑アンチエイリアス設定だけを変えた同一内容のテキストセルを左右に配置したCWXEditor上のプレビュー画面です。Pyでは全Verでどちらも右側の表示になります。

また、「Unicode文字が使用可能」ということはシナリオ制作においてわりと大きなメリットに思えますが、
これはPy3/WSN3以降の正規に認められている仕様として紹介しても問題ないのでしょうか?

Comments (2)

  1. k4nagatsuki repo owner

    その手間が莫大なものになる事から、CardWirthPyやcwxeditorでは絵文字の実装は考慮の外に置いています。実際にはPythonの処理系やWindows API、GUIツールキットの実装に依存しているはずです。

    これらの絵文字はどれもEmoji 1.0からあるようなので、半端に扱えたり扱えなかったりというのはよく分かりませんが、絵文字の実装にはアプリケーションやライブラリ、フォントによっても濃淡があったと思うので、たまたまこうなっているのではないかと思います。UTF-16で表現できないものが混ざっているのかとも思いましたが、そういうわけでもないようです。cwxeditorの場合、GDI+のモードによって描画可能な絵文字が変化しているように見えます。

    というわけで、現時点では絵文字は仕様の外で、表示は保証できません。

  2. 暗黒 騎士 reporter

    https://bitbucket.org/k4nagatsuki/cwxeditor/issues/256/ で「WSN形式ではUnicodeの文字をそのまま利用できます。」と仰っていたので 実際には暗黙の仕様で、Python3移行時にたまたま直った、Py2に残ったバグなのかとも思ったのですが、 仕様ではないということであれば諦めた方がよさそうですね。

    確認してよかったです。解答ありがとうございました。

  3. Log in to comment