2013年3月28日木曜日

Windows 7用IE10:ボタンの文字化け

Windows 7用のIE10でスクロールバーのボタンが豆腐になった話の続きです。
豆腐になるのではなく、ペンを持った手の字形が表示されると言っている方がいました。

Internet explorer 10 on windows 7 x64 using the wrong image for its UI - Microsoft Community

察するに、Segoe UI Symbolのバージョンというよりフォントファイル自体が無いんじゃないでしょうか。PCを軽くするために使わないフォントを削除するというのはありそうなことです。Segoe UI Symbolも警告が出るだけで、かんたんに削除できてしまいます。


実際に削除してみると、たしかにペンを持った手の字形が表示されました。下図の右側が削除した後のスクロールバーのボタンです。

右:Segoe UI Symbol削除後

前に見た各サイトでも同様の表示になりました。

右:Segoe UI Symbol削除後

それにしても元は別々の記号なのに、削除後は同じ記号が表示されているのはなんなんでしょうか。調べたら、そもそもこの字形はU+270Dという文字に該当するものでした。



しかしU+270DにIE10の表示と同じ字形を持っているフォントはありませんでした。


というか元の表示がU+270Dではないわけですから、コードポイントは関係ないのかもしれません。他のフォントを見ていたら、WingdingsがU+003FとU+F30Fにそっくりの字形を持っていることに気づきました。


試しにこのWingdingsも削除してみたところ、下図のように表示が変わりました。

Segoe UI Symbol・Wingdings削除後

U+003Fは本来クエスチョンマークなので、ペンを持った手の字形は「?」ということだったのかなと思いました。
こうして実験しておいてなんですが、フォントファイルはむやみに削除するもんじゃないですね(もちろんこの後は元に戻しました)。

2013年3月24日日曜日

「ゴシック保護」文字をただのスペースに偽装するテスト

下図はブロック文字U+2588により漢字がSimSunにフォント変化したコメントです。


ここで先頭に「ゴシック保護」文字U+30FBを追加します。U+2588と漢字の隣接を「a」(Arial)で遮ると、漢字の部分は先頭のU+30FBに従いゴシックに戻ります。


さて、下図はこのU+30FBを何か半角スペース的なものに置き換えたところです。 U+30FBと同じように漢字をゴシックに戻しています。


この半角スペース的に見えるものは、実はU+30FBと同じく「ゴシック保護」 の効果を持つU+FF9F(半角カタカナの半濁点)です。先日書いた合成用文字の挙動を利用して、○の位置を上にズラして描画されないようにしてみました。


ここで使ったU+0309はゴシックと合成することができました。



ただしこのまま先頭に置くと他の文字も上にズレてしまいます。そこでU+FF9Fの後ろへさらにU+0323という別の合成用文字を追加して位置を下げました。


この文字もゴシックと合成することができました。



本当はこれもU+0309の影響で上にズレているのですが、U+FF9Fの文字幅が狭いため字形の部分が描画されませんでした。
下図の下段は「a」 をゼロ幅文字(U+200C)に変えるなどして、もう少し実用的な形にしたところです。


と言っても、単にこれだけなら普通の全角スペース(U+3000)でも真似ができます。U+2588に直接隣接するとSimSun化してしまうため、間にU+200Cを追加しています。

問題は、いわゆるフォントの連れ回しに対しても「ゴシック保護」できるかどうかです。あいにくU+3000にそのような効果はありません。


U+FF9Fはこの状態を解除することができます。


U+3000とU+30FB・U+FF9Fの違いが何かという話は、長くなるので割愛します。由来はやはりWindowsコードページの定義の有無にあるんじゃないかと思います。

Unicode 字形 cp932 cp936 cp949 cp950 cp1250~cp1258
3000   8140 A1A1 A1A1 A140 -
30FB 8145 - - - -
FF9F DF - - - -

なお、この偽装U+FF9FはChromeでは豆腐になってしまいました。半角カタカナとの組み合わせがダメなようです。


ちなみにWindows 8上のIEは7と同じ表示でした。XPでは試してません。

2013年3月21日木曜日

Chrome 25:縮む罫線・縮まない罫線

Chrome 21の時に罫線のことはちょっと調べましたが(→ココ)忘れかけてたのであらためて。

下図はふつうの罫線記号で文字を囲んだコメントです。Chromeでは罫線の幅が縮んでいます。


これらの記号はIMEで「けいせん」を変換すると出てくる文字です。いずれもArialにあり、Chromeではゴシックより縦長のその字形が表示されているのではないかと思います。


下図は同じく「けいせん」 を変換すると出てくる太字の罫線です。これはChromeでも同じ幅です。


これらはArialにありません。
以前の日記でChromeはLucida Sans Unicodeではないかと書きましたが、こうして見るとU+2501だけ他の罫線記号より細い字形になっています。他はゴシックなのかもしれません。

もう一つ、二重の罫線もあります。これはChromeでは縮んでしまいます。


これらも冒頭の罫線と同様全てArialにありました。Chromeの表示はそれかなと思います。
なお、二重の罫線(U+2550~U+256C)はいずれもSimSun化文字のはずです。IEでは中の漢字がフォント変化しています。

いずれにしても、Chromeの表示を考慮するなら罫線は太字にしておいた方がいいみたいです。

<参考>罫線素片・Unicodeにおける罫線 - Wikipedia

2013年3月12日火曜日

合成用文字の特殊な挙動

以前Chromeの件でいろいろ実験した合成用文字の話です。変な挙動があるので書いときます。

下図は二つのAの間に合成用文字U+0304を挟んだところです。U+0304はAと合成され、コメントの幅は何も挟まない場合と変わりません。


このU+0304を複数続けて挟むと、挟んだ分だけ後ろのAの上下がズレていきます。


なぜこんなことが起きるのかはわかりません。なお、どの合成用文字でも同じことが起きるわけではありません。

おもしろいことにU+0304に直接接している文字だけがズレるのではなく、そこから後ろの文字が全部ズレます。


上だけでなく下に向かってズレる文字もあります。


これを利用してこんなことができるかもという例。コメントの先頭に半角スペース(U+0020) を置いて、その後ろに合成用文字を挟んでいます。


Chromeでこの現象は起きません。 FirefoxはIEと同様です。


合成用文字の後ろがひらがなだと合成自体が起きません。半角英数字(というかArial)の間に挟んでズレが発生していれば、その後ろでひらがな(MS Pゴシック)もこれに従います。


そもそも左の図ではU+0304の字形が変わっちゃってます。MS PゴシックにはU+0304があるのでそれだと思います。「あ」と隣接したことによりフォント変化が起きたのでしょう。

これを利用して、ひらがなでABCDEと同じことをやってみたところ。コメントの先頭は半角スペース2つにして、その間に合成用文字を挟んでいます。


念のため、これもChromeでは起こりません。


まぁChromeで起きないというより使いどころがわからないので、これ以上は検証してません。

2013年3月10日日曜日

Windows 8/7:ボタンの豆腐化

Segoe UI Symbolのことを調べていて、「Windows 8でアイコンが豆腐になる」という話を何度か見ました。

Windows8のシステム記号文字化け - OKWave

回答者の方が書いているようにMetroはボタンのアイコンにSegoe UI Symbolを使っています。それらのグリフを含まないフォントファイルに置き換えてしまったら、このように豆腐になるでしょう。試しにSegoe UI Symbolを別バージョンのファイルで上書きしてみると警告のメッセージが出るだけで、すんなりインストールできてしまいました。


ただし上の例のように人為的に置き換えたのではなく、サードパーティ製のアプリが勝手に置き換えたのではないかというケースもありました。

Unknown Characters or Vertical Rectangles are Showing in place of Metro Icons in Windows 8 Start Screen and Login Screen - Tweaking with Vishal

どういうアプリかわかりませんが7・8なら元々インストールされているフォントなので、XPやVista向けでそういうのがあるのかもしれません。

さて、こんなことが起きるのはWindows 8だけの話かと思っていたら7でもあることがわかりました。先日正式版がリリースされた7向けのIE10です。

IE10 shows square blocks on every dropdown menu and on on scroll bars - Microsoft Community

ここでおもしろいのはSegoe UI Symbolのバージョンが5.00だと起きるという点です。 Windows 7でKB2729094が適用されるとバージョンが5.01に上がるという話を前に書きました→ココ
うちは自動更新で適用されていたはずですが、適用されていないままの環境もあるんでしょうか。

5.00のフォントファイルを保存してあったので、5.01に上書きして上の例を再現してみました。 確かにIEのスクロールバーのボタンが豆腐になりました。

IE10 - Windows 7,Segoe UI Symbol 5.00

5.01だとちゃんと表示されます。

IE10 - Windows 7,Segoe UI Symbol 5.01

いろいろと見てみたら、ブラウザのスクロールバーだけではなくサイトのページ内でも同様のケースがあることに気づきました。下図は左からOutlook.com・Skydrive(Excel Web App)・MSDNで見たものです。

IE10 - Windows 7,Segoe UI Symbol 5.00

MSDNのはドロップダウンボタンが豆腐になっています。5.01なら大丈夫です。

IE10 - Windows 7,Segoe UI Symbol 5.01
字形から察するに、これらはSegoe UI Symbolの私用領域にあるグリフが使われているんじゃないでしょうか。

Segoe UI Symbol CSS - GitHub

5.00と5.01のCMapを比較すると、それらしきものが差分に含まれています。


スクロールバーの左右はU+E00E・E00F、上下はU+E010・E011なのかなと思いました。


ドロップダウンはU+E0A1でしょうか。


ちなみにFirefoxやChromeではなんの影響もありませんでした。

Firefox 20beta - Windows 7

Chrome 25 - Windows 7

IE10はアイコンの画像ではなくフォントのグリフを使うことで軽量化を図ってるんですかね。

2013年3月3日日曜日

Excel 2013:WebBrowserコントロールでエラー

Excel 2013では一部のActiveXコントロールがシート上で使えなくなっているようです。気がついたのはWebBrowserコントロールでした。


挿入しようとするとエラーになります。


念のためWindows 8・7両方で試しましたが結果は同じでした。調べたら公式に書いてありました。

Office 2013 returns an error inserting Scriptable ActiveX controls onto a worksheet - The Microsoft Excel Support Team Blog

いくつかのスクリプト可能な ActiveX コントロールが Office 2013 のドキュメントに挿入することはできません。(機械翻訳版) - Microsoftサポート

いちおう回避方法があるらしいですけけど、おすすめではないみたいですね。

2010以前のExcelであらかじめWebBrowserを挿入してあった場合、コードから操作しようとした時点でエラーが出ます。 ただしファイル形式がxlsm(2007形式)とxls(2003形式)で異なりました。

シート上に置いたWebBrowserでNavigateメソッドを実行するとします。

Sheet1.WebBrowser1.Navigate "http://bardiel-of-may.blogspot.jp/"

2010では問題ありません(Windows 8・7で確認)。


2013ではこれがエラーになりました。xlsm形式の場合:


WebBrowser1が認識されません(Shapeオブジェクトの"WebBrowser1"としては認識されてます)。

xls形式の場合:


WebBrowser1自体は認識しているものの「作成されていない」そうです。ちょっと何言ってるかわかりません。

なお、2013でもユーザーフォーム上では問題ありませんでした。



先のリンク先によれば、これ以外にもエラーになるものがあるようです。自分では元々こういうコントロールを使うことがあまりないので試してはいません。この件も他の方に作っていただいたシートで気づきました。