MMDVMHostのステータス表示用に使うSurenoo TFT LCDパネル(UARTで接続する)、ASCII以外の文字列も表示できるよなーと思って調べてみるとGB2312を受け付けるようです。とはいえ、GB2312なるものをきちんと知らないので…日本のようにJIS/Shift-JIS/EUC-JPのようにバリエーションがあるかどうかとか…以前作ったテスト用のコードをいじって実際に文字列を投げてみることにしました。
詳細はテスト用のコードを見れば分かるので割愛しますが、雰囲気としてはEUC-JPのような0xa1a1〜のバイト列を送るのと、当然ですがEUC-JPとは異なるグリフの割り当てになっています。EUC-CNとも呼ばれるもの、ということになりますか。
…で、あれば。イマドキのシステムはUnicodeで動いていますし、UCS(Unicode)→EUC-CNに変換してLCDに投げれば日本語の文章も多少は表示できるはず?
libkkcの辞書の素(data.arpa)を作成する際にEUC-JP←→UCSの変換テーブルをJIS0208.TXTを使って作っているので、EUC-CN←→UCSについてもGB2312.TXTを使えば作れるのでしょう(これが何故unicode.orgに置かれていないのかは謎として)。という訳で作ってみましたが…
変換テーブルの内容を見直すなどして記号類の対応を改善しないといけないのと、完全な変換は望めない以上kakasiを使って漢字を減らしていく等の方法を考えないと、実用は難しそうです。まあ、21世紀も20年以上が経過していますから…JISで書かれた日本語の文書をGB2312環境でどうにかして表示するようなツールが既に作られていてもおかしくはないはずですし(多分ある気がします)、未だに作られていないのならかなりの困難があるのかも。54.8kg(22:40)
28-Dec-2023補足:jis2gbというそのまんまなツールがあるのを見つけましたが、ライセンスの設定が無いのでこの変換テーブルを使うのは避けることにしました。代わりに、Unihan-2.txtを使って拾えるだけ文字を拾ってみるようにして、こんな感じ。
それでもまだ〓の出る場面があって、一番困っているのは「円」(U+5186)→「圆」(U+5706)の変換。これ、U+5186のkZVariantから「圓」(U+5713)を参照し、このkSimplifiedVariantでU+5706へ繋げるので…現状の、単にkSimplifiedVariant, kZVariantを見るだけ、という対応ではどうにもなりません。
とりあえず試作品のソースコードは現時点の物に更新してありますが…「japanese chinese kanji conversion」で検索してみるとKanjiChineseConverterやKanconvitがあるようなので、Unihan-2.txtで無理矢理やるよりも(ライセンスに問題が無ければ)こちらの成果を使った方が良い結果が得られるのかもしれません。
03-Jan-2024補足:kanji_chinese_converter/ja_zh_cn.rbをC言語化して組み込んでみました。このファイル自体にライセンスの文言は記されていませんがGitHub上のKanjiChineseConverterのライセンスがMITとなっているため、当日記サイトに置いた変換元(ja_zh_cn.rb)および変換後のファイルはMITライセンスとします。このテーブルがあるからといってUnihan-2.txtが不要になるという訳ではなく、これでもまだ〓になってしまう文字はあるようです。