2014年11月5日水曜日

波ダッシュって字形が変わった?

こんにちは。近藤です。

前回、Oracleの波ダッシュの文字化けについて書きました。そのとき、Unicodeコンソーシアムで登録されている波ダッシュの字形が、正しくない形で登録されたことを説明しました。

前回の投稿


16新コード 字形
[Shift_JIS]の波ダッシュ 0x8160

[Unicode]の波ダッシュ U+301C
[Unicode]の全角チルダ U+FF5E

[Shift_JIS]の[0x8160]は、[Unicode]の[U+301C]と同じ名称で、[Unicode]の[U+FF5E]と似た文字の形をしている、ということでした。

お手持ちの環境で試されたかたもいらっしゃると思います。Vista以降のWindowsの環境を使ったかたは、「あれっ?」と思われたのではないでしょうか?

メイリオフォントで確認してみると、

16新コード 字形
[Shift_JIS]の波ダッシュ 0x8160
メイリオの波ダッシュ U+301C
メイリオの全角チルダ U+FF5E

あれ?[Shift_JIS]と同じ形になっている?
[Unicode]の仕様が変わった?

いえいえ、[Unicode]の仕様は変わっていません。
Unicodeコンソーシアムの定義は文字コードごとに分かれており、[U+301C]と[U+FF5E]は以下に記載されています。

http://www.unicode.org/charts/PDF/U3000.pdf
http://www.unicode.org/charts/PDF/UFF00.pdf

この資料は、Unicode 7.0のもので、2014年に作成されたものです。
なので、2014年現在も

16新コード 字形
[Unicode]の波ダッシュ U+301C
[Unicode]の全角チルダ U+FF5E

が、Unicodeコンソーシアム的には正しい字形です。


Windows Vista以降のOSになると、かなりのフォントでは[Unicode]の「WAVE DASH」が左から「上がって下がる」字体([Shift_JIS]の「WAVE DASH」の字形と同じ)に変更されています。しかし、[Shift_JIS]の[0x8160]が変換される[Unicode]の16進コードは相変わらず[U+FF5E]ですし、字体が変更されたことにより、[Unicode]の[U+FF5E]と[U+301C]は、見た目が一致する文字なのに16進コードが異なる文字、ということになってしまっています。

Windows XPとWindows Vistaそれぞれで、OSに付属している文字コード表を使って、[U+301C]の文字を見てみます。


Windows XPの文字コード表で、「MS ゴシック」フォントを使って、
[Unicode]の「U+301C」を選択した画面。字形がUnicodeコンソーシアムの
定義にある「WAVE DASH」と同じになっていることがわかります。
また、この画面からはわかりませんが、[Shift_JIS]の[0x8160]は、
[Unicode]の[U+FF5E]に変換されます。


Windows 7の文字コード表で、同じく「MS ゴシック」フォントを使って、
[Unicode]の「U+301C」を選択した画面。Windows XPの
ときと同じフォントセットなのに字形が変わり、
[Shift_JIS]の「WAVE DASH」と同じになっていることがわかります。
字形は変わりましたが、[Shift_JIS]の[0x8160]は、
相変わらず[Unicode]の[U+FF5E]に変換されます。


この字体の変更がいつ行われたのかは、フォントによって異なります。例えば、MS 明朝およびMS ゴシックでは、フォントのJIS2004対応(Windows Vista)およびその旧字体(JIS90)互換用フォントのリリースと同時に変更されていますし、メイリオでは当初から[Shift_JIS]の「WAVE DASH」と同じ字形で提供されています。


参考として、私が使っているWindows 7環境に導入されているフォントのうち、[U+301C]を持つフォントで[Unicode]の「WAVE DASH」と「FULLWIDTH TILDE」を並べて出力してみました。

             

それぞれ、[U+301C][U+FF5E]の順で並べています。
MS 明朝/MS P明朝 のように2つの字形が異なるフォントもありますが、ほとんどのフォントは全く同じ字形です。
(notepadなどを使用して表示したとき、[U+301C]の字形が汚く見えるのは、そのフォントが縮小フォントを持っていないためです。だいたい18ptくらいのサイズにすると、キレイに見えるようになるはずです)

[U+301C]を持たないフォントは、代替フォントで表示され、

こんな感じに見えます(左が代替フォント)。


ここまで、Windowsを基準に書いてきましたが、同様に、この2文字をiOS、Android、Linuxの、Microsoft以外の環境で表示をしてみると、
iOS 8.1


Android 4.4



Linux (Fedora 20)


いずれも、同じ字形に見えます。


「字体が正しくなったし、これで問題解決」かというと、そんなことはなく。正しい字体が表示されることによって、余計やっかいなことになるかも知れません。

前回説明したとおり、この「波ダッシュ」は、環境によってどちらの文字を使用するかが異なります。
iOS、Android、Linuxなどの環境では、「波ダッシュ」は16進コードの[U+301C]で入力されます。
Windows環境では、「波ダッシュ」は16進コードの[U+FF5E](全角チルダ)で入力されます。
ということは、これら2つの環境それぞれで入力した
「なが〜い」

「なが~い」
の2つの文字列は、見た目は同じでも「波ダッシュ」16進コードが異なるので、検索では一致しない文字列、ということになるのです(なので、データ側を何とかして同一のコードに揃えるか、検索側で何とかしなければならないのです)。

「見た目が一致する文字なのに16進コードが異なる文字」って、見た目が違う以上にやっかいだと思いませんか?

0 件のコメント:

コメントを投稿