以前作成した Arduino用の漢字フォントライブラリの更新を前提に実装の見直し中です。
ライブラリはLittle Limitさんが開発&公開している「美咲フォント」を利用しています。
ライブラリは美咲フォントの古いバージョン(2012-06-03 正式公開初版)のJISコードベース版を利用しており、
面倒くさいコード変換(JISコード⇒ユニコード)をしていました。そのための不都合が若干生じていました。
最新版の美咲フォントでは、ユニコードを採用しているので、最新版を使った方が当然良いですね。
そこで、ライブラリ見直しのための調査を行うことにしました。この記事はその調査のメモです。
美咲フォント 最新版(X11 BDF 形式(misaki_bdf_2021-05-05.zip)の「美咲ゴシック第2」を利用する予定です。
□ 美咲フォントのサポート文字
美咲フォントは7,170文字のフォントを実装しています。調べてみると具体的に次の文字ブロックを網羅しています。
Unicode範囲 |
文字ブロック |
文字数 |
美咲フォント 実装文字数 |
備考 |
0000~007F |
C0制御文字と基本ラテン文字 |
95 |
95 |
非漢字 |
0080~00FF |
C1制御文字とラテン1補助 |
95 |
15 |
非漢字 |
0370~03FF |
ギリシア文字及びコプト文字 |
135 |
48 |
非漢字 |
0400~04FF |
キリル文字 |
256 |
66 |
非漢字 |
2000~206F |
一般句読点 |
111 |
20 |
非漢字 |
2100~214F |
文字様記号 |
80 |
4 |
非漢字(℃№℡Å) |
2150~218F |
数字に準じるもの |
60 |
10 |
非漢字(ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩ) |
2190~21FF |
矢印 |
112 |
6 |
非漢字(←↑→↓⇒⇔) |
2200~22FF |
数学記号 |
256 |
37 |
非漢字 |
2300~23FF |
その他の技術用記号 |
256 |
1 |
非漢字(⌒) |
2460~24FF |
囲み英数字 |
160 |
20 |
非漢字 |
2500~257F |
けい線素辺 |
128 |
43 |
非漢字 |
2580~259F |
ブロック要素 |
32 |
17 |
非漢字 |
25A0~25FF |
幾何学模様 |
96 |
16 |
非漢字 |
2600~26FF |
その他の記号 |
256 |
15 |
非漢字(★☆♀♂♠♡♢♣♤♥♦♧♪♭♯) |
3000~303F |
CJKの記号及び句読点 |
64 |
24 |
非漢字 |
3040~309F |
平仮名 |
93 |
87 |
ひらがな |
30A0~30FF |
片仮名 |
96 |
90 |
カタカナ |
3200~32FF |
囲みCJK文字・月 |
256 |
9 |
非漢字(㈱㈲㈹㊤㊥㊦㊧㊨㋿) |
3300~33FF |
CJK互換用文字 |
256 |
28 |
非漢字 |
4E00~9FFF |
CJK統合漢字 |
20,992 |
6,356 |
漢字・非漢字 |
FF00~FFEF |
半角・全角形 |
225 |
163 |
|
合計 |
24,446 |
7,170 |
|
□ 美咲フォントの1バイト文字のサポート文字
美咲フォントの「C0制御文字と基本ラテン文字」、「C1制御文字とラテン1補助」ブロックの対応状況です。
※ utf-8では、0x80以降は11ビット扱いで2バイトになることに注意
このブロックでの留意事項
・半角 ”¥" は0xA5 を使う。日本語Windows環境では、半角"\" 0x5cが"¥"になるので要注意
・「ラテン1補助」 "§", "¨", "°", "±", "´", "¶", "×", "÷" は
Windows環境の日本語等幅フォントでは全角幅、欧文等幅フォントでは半角幅となる
これらの文字は、シフトJISでは2バイト文字なんですが、ユニコード(※utf-8はで2バイト)では1バイトなんですよね..
シフトJIS環境を慣れ親しんだ私には、若干違和感がありますね~
美咲フォント的には、これらの文字は全角幅扱いです
例:”±"のフォント
□ 半角・全角文字変換に関する留意点
組み込み環境で液晶やLEDドットマトリックスなどの表示器にフォントを表示する場合、全角・半角を意識する必要があります。
半角・全角判定、双方向変換を行うために半角・全角の対応を調べて表にしました。
半角文字 |
全角文字 |
備考 |
コード |
16進数 |
文字 |
コード |
16進数 |
文字 |
32 |
0x20 |
|
12288 |
0x3000 |
|
|
33 |
0x21 |
! |
65281 |
0xff01 |
! |
|
34 |
0x22 |
" |
65282 |
0xff02 |
" |
ダブルクォートは左、右版もある |
35 |
0x23 |
# |
65283 |
0xff03 |
# |
|
36 |
0x24 |
$ |
65284 |
0xff04 |
$ |
|
37 |
0x25 |
% |
65285 |
0xff05 |
% |
|
38 |
0x26 |
& |
65286 |
0xff06 |
& |
|
39 |
0x27 |
' |
65287 |
0xff07 |
' |
シングルクォートは左、右版もある |
40 |
0x28 |
( |
65288 |
0xff08 |
( |
|
41 |
0x29 |
) |
65289 |
0xff09 |
) |
|
42 |
0x2a |
* |
65290 |
0xff0a |
* |
|
43 |
0x2b |
+ |
65291 |
0xff0b |
+ |
|
44 |
0x2c |
, |
65292 |
0xff0c |
, |
|
45 |
0x2d |
- |
65292 |
0xff0d |
− |
ハイフン・マイナス、他類似文字あり |
46 |
0x2e |
. |
65294 |
0xff0e |
. |
|
47 |
0x2f |
/ |
65295 |
0xff0f |
/ |
|
48 |
0x30 |
0 |
65296 |
0xff10 |
0 |
|
49 |
0x31 |
1 |
65297 |
0xff11 |
1 |
|
50 |
0x32 |
2 |
65298 |
0xff12 |
2 |
|
51 |
0x33 |
3 |
65299 |
0xff13 |
3 |
|
52 |
0x34 |
4 |
65300 |
0xff14 |
4 |
|
53 |
0x35 |
5 |
65301 |
0xff15 |
5 |
|
54 |
0x36 |
6 |
65302 |
0xff16 |
6 |
|
55 |
0x37 |
7 |
65303 |
0xff17 |
7 |
|
56 |
0x38 |
8 |
65304 |
0xff18 |
8 |
|
57 |
0x39 |
9 |
65305 |
0xff19 |
9 |
|
58 |
0x3a |
: |
65306 |
0xff1a |
: |
|
59 |
0x3b |
; |
65307 |
0xff1b |
; |
|
60 |
0x3c |
< |
65308 |
0xff1c |
< |
|
61 |
0x3d |
= |
65309 |
0xff1d |
= |
|
62 |
0x3e |
> |
65310 |
0xff1e |
> |
|
63 |
0x3f |
? |
65311 |
0xff1f |
? |
|
64 |
0x40 |
@ |
65312 |
0xff20 |
@ |
|
65 |
0x41 |
A |
65313 |
0xff21 |
A |
|
66 |
0x42 |
B |
65314 |
0xff22 |
B |
|
67 |
0x43 |
C |
65315 |
0xff23 |
C |
|
68 |
0x44 |
D |
65316 |
0xff24 |
D |
|
69 |
0x45 |
E |
65317 |
0xff25 |
E |
|
70 |
0x46 |
F |
65318 |
0xff26 |
F |
|
71 |
0x47 |
G |
65319 |
0xff27 |
G |
|
72 |
0x48 |
H |
65320 |
0xff28 |
H |
|
73 |
0x49 |
I |
65321 |
0xff29 |
I |
|
74 |
0x4a |
J |
65322 |
0xff2a |
J |
|
75 |
0x4b |
K |
65323 |
0xff2b |
K |
|
76 |
0x4c |
L |
65324 |
0xff2c |
L |
|
77 |
0x4d |
M |
65325 |
0xff2d |
M |
|
78 |
0x4e |
N |
65326 |
0xff2e |
N |
|
79 |
0x4f |
O |
65327 |
0xff2f |
O |
|
80 |
0x50 |
P |
65328 |
0xff30 |
P |
|
81 |
0x51 |
Q |
65329 |
0xff31 |
Q |
|
82 |
0x52 |
R |
65330 |
0xff32 |
R |
|
83 |
0x53 |
S |
65331 |
0xff33 |
S |
|
84 |
0x54 |
T |
65332 |
0xff34 |
T |
|
85 |
0x55 |
U |
65333 |
0xff35 |
U |
|
86 |
0x56 |
V |
65334 |
0xff36 |
V |
|
87 |
0x57 |
W |
65335 |
0xff37 |
W |
|
88 |
0x58 |
X |
65336 |
0xff38 |
X |
|
89 |
0x59 |
Y |
65337 |
0xff39 |
Y |
|
90 |
0x5a |
Z |
65338 |
0xff3a |
Z |
|
91 |
0x5b |
[ |
65339 |
0xff3b |
[ |
|
92 |
0x5c |
\ |
65340 |
0xff3c |
\ |
"¥"は0xa5を使う |
93 |
0x5d |
] |
65341 |
0xff3d |
] |
|
94 |
0x5e |
^ |
65342 |
0xff3e |
^ |
|
95 |
0x5f |
_ |
65343 |
0xff3f |
_ |
|
96 |
0x60 |
` |
65344 |
0xff40 |
` |
|
97 |
0x61 |
a |
65345 |
0xff41 |
a |
|
98 |
0x62 |
b |
65346 |
0xff42 |
b |
|
99 |
0x63 |
c |
65347 |
0xff43 |
c |
|
100 |
0x64 |
d |
65348 |
0xff44 |
d |
|
101 |
0x65 |
e |
65349 |
0xff45 |
e |
|
102 |
0x66 |
f |
65350 |
0xff46 |
f |
|
103 |
0x67 |
g |
65351 |
0xff47 |
g |
|
104 |
0x68 |
h |
65352 |
0xff48 |
h |
|
105 |
0x69 |
i |
65353 |
0xff49 |
i |
|
106 |
0x6a |
j |
65354 |
0xff4a |
j |
|
107 |
0x6b |
k |
65355 |
0xff4b |
k |
|
108 |
0x6c |
l |
65356 |
0xff4c |
l |
|
109 |
0x6d |
m |
65357 |
0xff4d |
m |
|
110 |
0x6e |
n |
65358 |
0xff4e |
n |
|
111 |
0x6f |
o |
65359 |
0xff4f |
o |
|
112 |
0x70 |
p |
65360 |
0xff50 |
p |
|
113 |
0x71 |
q |
65361 |
0xff51 |
q |
|
114 |
0x72 |
r |
65362 |
0xff52 |
r |
|
115 |
0x73 |
s |
65363 |
0xff53 |
s |
|
116 |
0x74 |
t |
65364 |
0xff54 |
t |
|
117 |
0x75 |
u |
65365 |
0xff55 |
u |
|
118 |
0x76 |
v |
65366 |
0xff56 |
v |
|
119 |
0x77 |
w |
65367 |
0xff57 |
w |
|
120 |
0x78 |
x |
65368 |
0xff58 |
x |
|
121 |
0x79 |
y |
65369 |
0xff59 |
y |
|
122 |
0x7a |
z |
65370 |
0xff5a |
z |
|
123 |
0x7b |
{ |
65371 |
0xff5b |
{ |
|
124 |
0x7c |
| |
65372 |
0xff5c |
| |
|
125 |
0x7d |
} |
65373 |
0xff5d |
} |
|
126 |
0x7e |
~ |
65374 |
0xff5e |
~ |
|
162 |
0xa2 |
¢ |
65504 |
0xffe0 |
¢ |
|
163 |
0xa3 |
£ |
65505 |
0xffe1 |
£ |
|
165 |
0xa5 |
¥ |
65509 |
0xffe5 |
¥ |
\記号はこれを使う |
166 |
0xa6 |
¦ |
65508 |
0xffe4 |
¦ |
|
167 |
0xa7 |
§ |
167 |
0xa7 |
§ |
1バイトで全角幅 |
168 |
0xa8 |
¨ |
168 |
0xa8 |
¨ |
1バイトで全角幅 |
172 |
0xac |
¬ |
65506 |
0xffe2 |
¬ |
|
173 |
0xad |
|
173 |
0xad |
|
ソフトハイフン、1バイトで全角幅 |
175 |
0xaf |
¯ |
65507 |
0xffe3 |
 ̄ |
マクロン |
176 |
0xb0 |
° |
176 |
0xb0 |
° |
度、1バイトで全角幅 |
177 |
0xb1 |
± |
177 |
0xb1 |
± |
1バイトで全角幅 |
180 |
0xb4 |
´ |
180 |
0xb4 |
´ |
アクセント、1バイトで全角幅 |
182 |
0xb6 |
¶ |
182 |
0xb6 |
¶ |
段落記号、1バイトで全角幅 |
215 |
0xd7 |
× |
215 |
0xd7 |
× |
乗算記号、1バイトで全角幅 |
247 |
0xf7 |
÷ |
247 |
0xf7 |
÷ |
除算記号、1バイトで全角幅 |
65377 |
0xff61 |
。 |
12290 |
0x3002 |
。 |
|
65378 |
0xff62 |
「 |
12300 |
0x300c |
「 |
|
65379 |
0xff63 |
」 |
12301 |
0x300d |
」 |
|
65380 |
0xff64 |
、 |
12289 |
0x3001 |
、 |
|
65381 |
0xff65 |
・ |
12539 |
0x30fb |
・ |
|
65382 |
0xff66 |
ヲ |
12530 |
0x30f2 |
ヲ |
|
65383 |
0xff67 |
ァ |
12449 |
0x30a1 |
ァ |
|
65384 |
0xff68 |
ィ |
12451 |
0x30a3 |
ィ |
|
65385 |
0xff69 |
ゥ |
12453 |
0x30a5 |
ゥ |
|
65386 |
0xff6a |
ェ |
12455 |
0x30a7 |
ェ |
|
65387 |
0xff6b |
ォ |
12457 |
0x30a9 |
ォ |
|
65388 |
0xff6c |
ャ |
12515 |
0x30e3 |
ャ |
|
65389 |
0xff6d |
ュ |
12517 |
0x30e5 |
ュ |
|
65390 |
0xff6e |
ョ |
12519 |
0x30e7 |
ョ |
|
65391 |
0xff6f |
ッ |
12483 |
0x30c3 |
ッ |
|
65392 |
0xff70 |
ー |
12540 |
0x30fc |
ー |
|
65393 |
0xff71 |
ア |
12450 |
0x30a2 |
ア |
|
65394 |
0xff72 |
イ |
12452 |
0x30a4 |
イ |
|
65395 |
0xff73 |
ウ |
12454 |
0x30a6 |
ウ |
|
65396 |
0xff74 |
エ |
12456 |
0x30a8 |
エ |
|
65397 |
0xff75 |
オ |
12458 |
0x30aa |
オ |
|
65398 |
0xff76 |
カ |
12459 |
0x30ab |
カ |
|
65399 |
0xff77 |
キ |
12461 |
0x30ad |
キ |
|
65400 |
0xff78 |
ク |
12463 |
0x30af |
ク |
|
65401 |
0xff79 |
ケ |
12465 |
0x30b1 |
ケ |
|
65402 |
0xff7a |
コ |
12467 |
0x30b3 |
コ |
|
65403 |
0xff7b |
サ |
12469 |
0x30b5 |
サ |
|
65404 |
0xff7c |
シ |
12471 |
0x30b7 |
シ |
|
65405 |
0xff7d |
ス |
12473 |
0x30b9 |
ス |
|
65406 |
0xff7e |
セ |
12475 |
0x30bb |
セ |
|
65407 |
0xff7f |
ソ |
12477 |
0x30bd |
ソ |
|
65408 |
0xff80 |
タ |
12479 |
0x30bf |
タ |
|
65409 |
0xff81 |
チ |
12481 |
0x30c1 |
チ |
|
65410 |
0xff82 |
ツ |
12484 |
0x30c4 |
ツ |
|
65411 |
0xff83 |
テ |
12486 |
0x30c6 |
テ |
|
65412 |
0xff84 |
ト |
12488 |
0x30c8 |
ト |
|
65413 |
0xff85 |
ナ |
12490 |
0x30ca |
ナ |
|
65414 |
0xff86 |
ニ |
12491 |
0x30cb |
ニ |
|
65415 |
0xff87 |
ヌ |
12492 |
0x30cc |
ヌ |
|
65416 |
0xff88 |
ネ |
12493 |
0x30cd |
ネ |
|
65417 |
0xff89 |
ノ |
12494 |
0x30ce |
ノ |
|
65418 |
0xff8a |
ハ |
12495 |
0x30cf |
ハ |
|
65419 |
0xff8b |
ヒ |
12498 |
0x30d2 |
ヒ |
|
65420 |
0xff8c |
フ |
12501 |
0x30d5 |
フ |
|
65421 |
0xff8d |
ヘ |
12504 |
0x30d8 |
ヘ |
|
65422 |
0xff8e |
ホ |
12507 |
0x30db |
ホ |
|
65423 |
0xff8f |
マ |
12510 |
0x30de |
マ |
|
65424 |
0xff90 |
ミ |
12511 |
0x30df |
ミ |
|
65425 |
0xff91 |
ム |
12512 |
0x30e0 |
ム |
|
65426 |
0xff92 |
メ |
12513 |
0x30e1 |
メ |
|
65427 |
0xff93 |
モ |
12514 |
0x30e2 |
モ |
|
65428 |
0xff94 |
ヤ |
12516 |
0x30e4 |
ヤ |
|
65429 |
0xff95 |
ユ |
12518 |
0x30e6 |
ユ |
|
65430 |
0xff96 |
ヨ |
12520 |
0x30e8 |
ヨ |
|
65431 |
0xff97 |
ラ |
12521 |
0x30e9 |
ラ |
|
65432 |
0xff98 |
リ |
12522 |
0x30ea |
リ |
|
65433 |
0xff99 |
ル |
12523 |
0x30eb |
ル |
|
65434 |
0xff9a |
レ |
12524 |
0x30ec |
レ |
|
65435 |
0xff9b |
ロ |
12525 |
0x30ed |
ロ |
|
65436 |
0xff9c |
ワ |
12527 |
0x30ef |
ワ |
|
65437 |
0xff9d |
ン |
12531 |
0x30f3 |
ン |
|
65438 |
0xff9e |
゙ |
12443 |
0x309b |
゛ |
|
65439 |
0xff9f |
゚ |
12444 |
0x309c |
゜ |
|
半角・全角変換での留意点
・基本ラテン文字(半角スペースを除く 0x21~0x7e)の全角コードは連続性があり、次の式で変換できる
全角コード = 半角コード - 0x20 + 0xff00
・ラテン1補助文字(C1を除く 0x80~0xff)は次の文字のみ変換対応すればよい
'¢' 0xa2 ⇒ 0xffe0
'£' 0xa3 ⇒ 0xffe1
'¥' 0xa5 ⇒ 0xffe5
'¦' 0xa6 ⇒ 0xffe4
'¬' 0xac ⇒ 0xffe2
'¯' 0xaf ⇒ 0xffe3
・半角カタカナは、半角コードが連続性があるのに対し、全角コードは連続性がないので変換のためのテーブルが必要となる
1バイトコードのテーブル(配列)を用意して、次のように参照すれば変換できますね
kana_h2z_table = (
0x02,0x0c,0x0d,0x01,0xfb,0xf2,0xa1,0xa3,
0xa5,0xa7,0xa9,0xe3,0xe5,0xe7,0xc3,0xfc,
0xa2,0xa4,0xa6,0xa8,0xaa,0xab,0xad,0xaf,
0xb1,0xb3,0xb5,0xb7,0xb9,0xbb,0xbd,0xbf,
0xc1,0xc4,0xc6,0xc8,0xca,0xcb,0xcc,0xcd,
0xce,0xcf,0xd2,0xd5,0xd8,0xdb,0xde,0xdf,
0xe0,0xe1,0xe2,0xe4,0xe6,0xe8,0xe9,0xea,
0xeb,0xec,0xed,0xef,0xf3,0x9b,0x9c,
)
全角カタカナコード = kana_h2z_table[半角カタカナコード - 0xff61] + 0x3000
最近のコメント