先日入手したX-Windowの書籍に載っているサンプルプログラム(付箋紙)をM1 Macでルドしてみました。
背景に有る様に実行時に文字列を渡すと、その文字列を小さい付箋のウィンドウに表示するプログラムです。
Macのターミナルから実行してみると、実行コマンド列では日本語入力ができていますが、実行結果では文字化けしてしまいました。
プログラムの中では、表示に使う日本語フォントを指定していますが、文字化けするので文字フォントの問題だけではなさそうです。
扱う文字コード(シフトJIS,EUC,UTF-8など)が原因かもしれません。
何か方法が無いかと検索したところ、「Xlibでの日本語の表示について」という記事が見つかりました。この記事にもサンプルプログラムが載っていたので、これもビルドして実行結果を確かめました。
こちらは文字化けしませんでした。
まだ、はっきりした文字化けの原因がわからないので、2つのソースコードを比較しながら調査の予定です。
#追記(2022/08/18)
こちらの書籍の「フォントセットで日本語を出力するには?」というテーマのサンプルプログラムは先日、実行時エラーが出て動作確認できなかったのですが、恐らくエラーの原因は実行時のコマンドパラメータを不適切に使っていた為だと思います。
改めて、
# ./xp0415 '日本語とEnglishが混ざったText'
と実行したところ、
の様に日本語と英語が混ざった文章を画面に出力できました。
今回の3つのサンプルプログラムの実行結果からは日本語フォントが組み込まれていて、それを適切に選べば日本語表示できると考えています。
ただ、プログラミングはこれで良いのですが、PS3/T2 SDEのような環境で OSレベルでローカライズするのには、フォントが有るだけでは足りない筈で、これをどうするかは未調査です。
参考資料は日本語フォントについては「X Window System(4:日本語フォントの扱い)」がありました。
X11のフォント全般のフォント名についての解説は「タイプ 1 フォントを X11 で利用する」にありました。
#追記(2022/08/18)
M1 Macで日本語表示の動作確認ができた2つのプログラムを PS3 / T2 SDE 21.5の環境でビルドしてみました。ビルドはできましたが、実行時にエラーが発生して実行できませんでした。デバッグの経緯から推察すると、T2 SDE 21.5の環境にプログラムが検索した(日本語対応)フォントがインストールされていない為に発生したエラーと推測しています。
#追記(2023/12/02)
改めて、「Xlib(+Xft)で日本語文字表示」を読んでみると、「国際化対応(Internationalization: I18N)される前のX Window System(X11R4まで)のXlibでは、XLoadFont()、XDrawString()を使って文字を描画していましたが、これらはASCII文字用で、日本語を出すことができません。XDrawString16()という、パッチ的な(?)関数で日本語を出すこともできるようですが、国際化対応版のX Window System/Xlib(X11R5以降)では推奨されません。」とあるので、書籍にある「XDrawString16」という関数を利用した日本語表示の方法は古い方法で現状推奨されていない方法であることがわかりました。
(参考:「文字出力」では両方の方法の比較をしたサンプルコードが載っています。)
XDrawString16()関数の代わりに国際化対応では、XmbDrawString()関数を使う様です。この関数を使った「文字出力」のサンプルプログラムの実行結果は下図の様になります。
(参考:「X Window System」(linkはWikipedia) )