Notes/Domino の LotusScript で JSON を扱うためのクラスはバージョン10で実装されました。※ちなみに現時点の最新バージョンは 12.0.1 FP1 で、以下の挙動はこのバージョンで確認したものです
NotesJSONElement クラスにエレメントの名前を扱う Name プロパティがあります。
先日この JSON を扱うプログラムを開発していて Name プロパティの不具合に「再び」遭遇しました。
Name プロパティにある日本語の値が文字化けするのです。
バージョン10で実装された2年前に私は本件をメーカーサポートへ報告しています。後に2つのメジャーリリースがありますから修正される機会はあったように思います。しかしながら優先度低いと認定されてしまっているのか、いまだに修正されていない状態です。ノーツってやつぁ...
以下にどのような不具合なのか示します。
下の画面ショットは、実際のコードをデバッグモードで実行しているときのものです。
AppendElement メソッドで追加するエレメントの名前を日本語で"言語"としました。このメソッドを実行した直後のデバッグ画面の「変数」タブで NotesJSONElement オブジェクト「ELM」の Name プロパティで値の表示が文字化けしていることがわかります。
ただし VALUE プロパティの値は文字化けしていませんね。
このコードには続きがあります。
AppendElement メソッドで追加したエレメントの名前 "言語" を指定して NotesJSONElement オブジェクトを作ります。そして NotesJSONElement クラスの Name プロパティの戻り値を Print 命令で出力してみました(下図)。
エレメントの呼び出しに日本語の使用は可能のようですが、デバッガでの表示と Print 命令で出力すると文字化けしました。
Value プロパティの戻り値も同様に出力してみましたが、こちらは文字化けしません(下図)
JSON をテキスト文字列にする NotesJSONNavigator クラスの Stringify メソッドの出力は文字化けしません(下図)。
よくわかりませんがJSONエレメントの名前を日本語にするなんてことはあまりないことなのかもしれませんが、私が今回開発していたプログラムは、JSONを自動生成するようなものでした。この手の処理では、生成元の文字列で日本語の入力を禁止するといったことをすればよいのでしょうが、そんなことすれば日本人のユーザーにとって使いづらいシステムとして認定されることでしょう。
という訳で本件メーカーサポートへ「再び」報告しました。そうして発行された Article が KB0099167 です。
NotesJsonElement name attributes containing double-byte characters can't be parsed correctly
https://support.hcltechsw.com/csm?id=kb_article&sysparm_article=KB0099167
もしこの問題がこれから開発しようとしているプログラムに影響がありそうでしたら Subscribe しておくと、修正されたバージョンなどが追記されるなどして Article が更新されたタイミングで通知してくれると思います。




0 件のコメント:
コメントを投稿