LoginSignup
0
0

More than 5 years have passed since last update.

[Java] Wingdings を表示する方法

Posted at

はじめに

  • 個人的なメモです(忘れても大丈夫なように)
  • Windows の Java での話です。それ以外の環境ではチェックしていません。
  • フォント名は Wingding ではなく Wingdings なので注意(最後に s がつく)
    • Java では不正なフォント名を指定してもエラーにならず Dialog にフォールバックされるため、間違いに気が付きにくい
  • 参考: wikipedia - Wingdings

結論

  • 一般的に Wingdings というフォントでは 0x21~0xfe (or 0xff) のあたりにグリフがあることになっているけれど、Windows の Java で Wingdings を表示するには U+f021~U+f0fe(or U+f0ff) を使う必要がある

経緯

古い Java アプリを使っていたら、Wingdings でうまく表示できなかった。
具体的には様々なサイトでは ! (0x21) が鉛筆マークになると記載されているのに、うまく表示ができていなかった(そのアプリでは四角で表示された。変換できない文字扱い)。

古いアプリのせいなのかと思って(Swing ベースのアプリだったので、おそらく Java7 以前のもの)調べてみましたが、どうやら Java8 or Java11 でも JavaFX でもシンボルがうまく表示できないのは同様な様子。

調査結果

awt の Font クラスを使って、該当のフォントで表示できる範囲をチェックしてみました。

WingdingsTest.java
import java.awt.Font;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class WingdingsTest {

    public static void main(String[] args) {
        final Font font = new Font("wingdings", Font.PLAIN, 32);
        final String codes = IntStream.range(0, 0x10000)
                .filter(font::canDisplay)
                .mapToObj(Integer::toHexString)
                .collect(Collectors.joining(","));
        System.out.println(codes);
    }
}

結果を見ると、U+0009(TAB), U+000a(LF), U+000d(CR) と U+20xx あたりと、U+f0xx あたりが表示可能になっているみたい。

実際に試してみると、U+f021~U+f0ff あたりが Wingdings の記号になっていました。つまり、0x21 の鉛筆マークを表示したい場合には U+f021 のコードポイントを表示すればよいらしい。

この辺りはUnicode のいわゆる外字エリア(私用領域; Private Use Area)のようです。

この wikipedia の「外字」の「JIS X 0221 (Unicode)における外字」の説明を見たら、以下のように書いてありますね。

WingdingsなどのシンボルフォントのグリフはUnicodeではU+F020〜U+F0FFの一部に対応付けられている

試したところ、Wingdings だけじゃなく、Webdings や Symbol のフォントも似た感じでした。

0
0
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
0
0