Home

Awesome

East Asian Ambiguous Width問題のための修正ロケール

East Asian Ambiguous Width問題とは

East Asian Ambiguous文字とは、Unicodeで文字幅が曖昧(文脈により異なる文字幅)と定義されている文字のことで、例えば、※(U+203B)や○(U+25CB)や×(U+00D7)や△(U+25B3)などの文字です。

East Asian Ambiguous 文字の一覧はこちら

East Asian Ambiguous Width問題とは、これらの文字をコンソールで表示する際libcのwcwidth(3)、シェル、ターミナルエミュレータ、テキストエディタなどのプログラムがそれぞれ異なる文字幅で認識する問題です。

例えばテキストエディタのカーソルの表示位置と内部状態が食い違ってしまうため、表示が壊れてしまいます。

また、絵文字やNerdFontの文字も曖昧となっているため、ターミナルで絵文字を利用する際にも問題となります。

解決方法その1: 曖昧な文字を全角で統一する EAW-FULLWIDTH

この問題の古典的な解決方法は曖昧な文字幅を全角で統一する事です。

対応方法はアプリケーションによって様々ですが、xterm, mlterm, vimなどを使っている人は設定やオプションを指定するだけで文字幅を変更できます。

rxvt-unicodeのようなアプリはlibc localeを修正することで文字幅を変更できます。

各アプリケーションの設定方法はREADME-EAW-FULLWIDTH.mdを参照してください。

解決方法その2: 文字毎に最適な文字幅を設定する EAW-CONSOLE

曖昧な文字を全角に変更すると以下のような問題が起こります。

より良い解決方法は文字幅を個別に定義し、利用しているすべてのアプリケーションで文字幅を統一することです。 これが可能なアプリケーションは、

などがあります。 すべてのアプリケーションで文字幅を統一するのは大変ですが、このレポジトリではこれを実現するためのツールとおすすめのロケールUTF-8-EAW-CONSOLEを提供します。

各アプリケーションの設定方法はREADME-EAW-CONSOLE.mdを参照してください。

もっとカスタマイズ

UTF-8-EAW-FULLWIDTHUTF-8-EAW-CONSOLEなどのロケールのフレーバーはconfig.iniに定義しておりこれらが気に入らない場合、以下のように追記して./gen.pyを実行します。

[EAW-CUSTOM]
eaw = 1
...

フォント

このロケールに最適化した合成フォントをつくりました! font-eaw

どうしてこうなったシリーズ

大文字と小文字の違いのはずなのに

₀だけNeutral

♦だけNeutral

小文字ローマ数字の11と12だけNeutral

℡がAmbiguousで℻がNeutral

Neutralで半角描画が困難な文字たち

⓪と⑳と㉑

https://sourceware.org/bugzilla/show_bug.cgi?id=24658

麻雀牌

トランプのジョーカーだけWide

参考文献