LoginSignup
3
2

More than 5 years have passed since last update.

All About ACS: ACS 5250 - 外字の表示

Last updated at Posted at 2017-08-02

ACS 5250 - 外字の表示

IBM i Access Client Solutions の 5250 で外字を画面表示させる方法です。
ACS 特有の話ではなく Java の仕様・制約・バグと対応方法の話です。

フォントは「Monospaced」を選択

「編集」→「設定」→「外観」→「フォント」で表示に利用するフォント名は、必ず「Monospaced」を選択してください。

image.png

ある文字を表示しようとした場合、指定したフォントに対象の文字がない場合、別のフォントを利用して文字を表示する機能を「フォントのフォールバック」と呼びます。
フォールバックの仕組みは、Windows と Java では異なります。

Java は、マルチプラトフォームのためプラットフォームに依存しないフォント名である「論理フォント」と、実際のフォント名を直接指定する「物理フォント」が存在します。
Java が出てきた当初は、「論理フォント」しか存在していませんでした。その後 Java 1.2 で「物理フォント」が利用できるようになりました。
Javaでは「物理フォント」を直接指定した場合、フォールバックが起こりません。Windows 側の外字エディターで指定したリンクは無視します。
もちろん、外字は指定したフォントに含まれていませんから、フォールバックが起こらなければ表示されません。
Javaでフォールバックが起こるのは、論理フォントを指定した時だけです。
さらに論理フォントの中で、文字間隔が一定なのは論理フォント「Monospaced」です。5250 画面
に均等・升目上に文字を表示するには「Monospaced」を選ぶ必要があります。

利用するフォントを変えたい場合

日本語環境のデフォルトでは「Monospaced」でMSゴシックが利用されています。
MSゴシック以外を使いながら、外字を使いたい場合は、「Monospaced」で利用するフォントを変更します。

「Monospaced」が実際にどのフォントを利用するかは「fontconfig.properties」に指定できます。
まず、「fontconfig.properties」を用意します。
コマンドプロンプトを「管理者として実行」し、利用しぃている JRE の 「fontconfig.properties.src」を「fontconfig.properties」としてコピーします。

C:\WINDOWS\system32>cd C:\Program Files (x86)\Java\jre1.8.0_131\lib

C:\Program Files (x86)\Java\jre1.8.0_131\lib>copy fontconfig.properties.src fontconfig.properties
        1 個のファイルをコピーしました。

コピー先の「fontconfig.properties」を、Unixの改行コード「LF」に対応したエディターで開きます。
ここでは Notepad++ を使っています。

image.png

「monospaced.plain.japanese」の行を探します。
今回は「monospaced.plain.japanese=MS Gothic」なので日本語環境での「Monospaced」にはMSゴシックが使われる設定になっています。

物理フォント名の部分を、実際に利用したいものに変えます。
例えば、MS明朝を利用したいなら「monospaced.plain.japanese=MS Mincho」を指定します。

外字の代わりに記号が表示される

Oracle Java 8.0 u112 で外字が別の文字(記号)で表示されるバグが導入されました。

外字より先に参照されるフォールバックのリストに「symbols」が指定されてためです。

image.png

「symbols」の物理フォントは「Segoe UI Symbol」です。

image.png

このフォントは外字エリアにも文字(記号)の登録があるので、外字にたどり着く前に、優先順位の高いこちらが使用されてしまうのが原因です。

image.png

Java に JDK-8133309 : [win10] Some unicode characters do not display any more after upgrading to Windows 10というバグレポートがあがり、その中で Java からもいろいろな記号が使えた方がいいよね、の機能追加の副作用です。

Also we may want to find a more reliable source of the symbol fonts. I think Segoe UI Symbol is the obvious choice here to add to our fallbacks.

回避するのは、前述の方法で「fontconfig.properties」を作成し、そこから「symbols,」を除去し

sequence.fallback=lucida,symbols,\
                  chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\

こうして保存します。

sequence.fallback=lucida,\
                  chinese-ms950,chinese-hkscs,chinese-ms936,chinese-gb18030,\

この件は JDK-8179888 : Java "1.8.0_112" on Windows 10 displays different characters for EUDCs from ones created in eudcedit.exe. でバグ報告されていて、8u152 で修正予定です。

image.png

8u152 は 2017-10-16 に出荷予定です。

image.png

ただし 2017年10月に出荷されても8u152 は自動更新の対象ではありません。 2017年10月の自動更新はセキュリティパッチだけで機能の修正・拡張をしない8u151 のはずです。

以前には外字が表示されないというバグも

8u60 で外字が表示されないこともありました。

これが修正されたのは 8u74 でした。Java の外字にはいろいろあります。

今回は ACS ではなく Oracle Java の使用・制約・バグの話でした。
ACS としては Java が正常に稼働することを期待し、Java の仕様と制約の中で稼働します。


「All About ACS」では IBM i に対する新しいクライアント「IBM i Access Client Solutions」の情報をいろいろ提供していきます。
記事一覧はこちらで確認いたけます。

許可の無い転載を禁じます。
この記事は筆者の個人的な責任で無保証で提供しています。
当記事に関してIBMやビジネスパートナーに問い合わせることは、固くお断りします。


3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2