On Mon, Jan 13, 2014 at 07:13:04AM +0900, Yuki Shira wrote:
> しらゆきです。
> 
> 例えば「直」(U+76F4)の字が日本語の字形と異なるものになっています(OSM.orgも)。
> http://tile.paulnorman.ca/demo/fonts.html#11/33.7475/130.7071
> 他にもあるかもしれません。

なんでそうなるか、ちょっと調べてみました。
fontforge入れて、DroidSansFallbackのフォントを確かめてみたりもしました。
#ちなみに、Exe版のfontforgeは日本語版Windowsだと文字が化けて駄目ですねえ。

あまり文字コードには詳しくないので、違っているかもしれませんけど以下
まとめです。

まず、UNICODEの漢字というのは、基本的にCJKで統合化されています。
そのため、同じコードポイントでも、複数の表現があります。
http://ja.wikipedia.org/wiki/CJK%E7%B5%B1%E5%90%88%E6%BC%A2%E5%AD%97

U+76F4の場合、http://www.unicode.org/charts/PDF/U4E00.pdf にある(33.7Mあるので注意)
表を見るとわかりますが、字形はなんと6パターンあります。どれも
UNICODEとしては正しい字形です。JとKがほぼ同じ、CとVがほぼ同じかな。

で、くだんのフォントセットには、Cをベースにした字形が入っていて、
表示させると日本で一般的に使われている字形とは異なったものが出てくる
わけです。

ただ、これだと、とても困るわけです。で、字形を指定するために、
IVS(Ideographic Variation Sequence/Selector)という概念ができました。
UNICODEでは、本来の文字コードのあとに、VSという字形選択子をつける
ことで、細かな字形を選択できるようになっています。どの字形を
どう選択するか、については、データベース(IVD: Ideographic Variation Database)
があります。

この辺は
http://mojikiban.ipa.go.jp/1292.html
の受け売りです。

で、UNICODEでもIVDは定義されています。
http://www.unicode.org/ivd/ に説明があり、実際に、
http://www.unicode.org/ivd/data/2012-03-02/http://www.unicode.org/ivd/data/2012-03-02/IVD_Charts.pdf (91Mあるので注意)
に選択子が定義されています。
PDFを見ると、U+76F4にも定義があり、日本で使われている文字を指定する
のであれば、VSとして「E0100」を指定すればよいようです。

ですので、文字を、UNICODEの流儀に従ってちゃんと表示させようと
すると、IVS/IVDをちゃんと使って表示させる、というのが正しい
やり方なのだろうと思います。
ただ、そうすると、

1) たとえば日本の範囲では、すべての文字に対して、VSの指定を
   し直す必要がある。
2) OSMをレンダリングする時に、動的に文字を表示する必要がある

という難問をこなせねばならないと思います。

なので、
> > いいだ個人的としてはDroidのほうが綺麗だと思うのですが、
> > 1つのコードで複数の文字に対応しているものがあった気がしていて(うろ覚え)、
> > その文字がどういう表示になるかを気にしています。
> > (中国語も、繁體字(zh-tw)と簡体字(zh-cn)がありますし)
> >
> > 「こちらのフォントのほうが良い」あるいは「もっとよいフォントがある」などの情報をお持ちの方は教えていただけると嬉しいです

は、たとえあったとしても、CJKでそれぞれ期待した文字が表示されない、
という問題はつきまとってしまうと思います。

ribbon

_______________________________________________
Talk-ja mailing list
Talk-ja@openstreetmap.org
https://lists.openstreetmap.org/listinfo/talk-ja

メールによる返信