パスワードを忘れた? アカウント作成
13021494 journal
日記

emkの日記: リンク/ジャンクション作成ツール v1.07 1

日記 by emk

説明ページ
Windows 10 Insider Previewの、特権不要でのシンボリックリンク作成に対応。

SeCreateSymbolicLinkPrivilegeが定義されているが有効にしなくても作成可能な状況など想定していなかったので、特権の有効化に失敗すると作成をあきらめていたが、エラーを無視して作成を試みるように変更した。

公式には特権不要でのシンボリックリンク作成はBuild 14972から対応したことになっているが、これはSYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATEを初めてサポートしたビルドのようで、それ以前のビルドでも開発者モードにすれば作成可能(しかも特別なフラグも不要)だった模様。少なくともBuild 14931ではすでに対応していたことを確認(それ以前のビルドは手元に残っていないので不明)。

174087 journal

emkの日記: HTML/XMLの文字参照にサロゲートペアは使えない 1

日記 by emk
HTML 4

文字参照で使える符号位置(厳密には符号位置ではないのですがここでは深入りしません)の範囲はSGML宣言で定められています。

55296   2048    UNUSED  -- SURROGATES --

このように、55296(十六進数で表すとD800)からの2048個(DFFFまで)の数字は未使用となっています。

XML

文字参照の文法は以下の生成規則により規定されています

[66]       CharRef       ::=       '&#' [0-9]+ ';'
            | '&#x' [0-9a-fA-F]+ ';'    [WFC: Legal Character]

[WFC: Legal Characeter]の定義を参照すると、文字参照により参照される文字はCharの生成規則に合致しなければならないと書かれています。

Charの生成規則は以下のように定義されています。

[2]       Char       ::=       #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]    /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */

このように、XMLにおいて(たとえ文字参照であっても)D800..DFFFのコードポイントを使うと整形式制約に違反します。定義に書かれているように、整形式制約違反はfatal errorです。fatal errorが発生した場合、XMLプロセッサは通常処理を続行してはならないとも明記されています。もっともRSSリーダーにはXMLパーサーすら使わないようなきわめていい加減な実装のものが数多くあるので、通ってしまうこともあるようです。

HTML5

XMLの仕様書と比べると実際に手続き型のプログラミング言語が行う処理を追いかけるような形で書かれていて、非常に読みやすいです。文字参照の処理は、最新の編集者草案では以下のように定義されています。

Otherwise, if the number is in the range 0xD800 to 0xDFFF or is greater than 0x10FFFF, then this is a parse error. Return a U+FFFD REPLACEMENT CHARACTER.

このように、文字参照のD800..DFFFはU+FFFDに置き換えなければならないと明記されています。今のところ仕様に忠実なのは、「HTML5対応」を謳う主要ブラウザの中ではFirefoxだけのようです。もっとも2009年8月25日時点の草案では

Otherwise, if the number is greater than 0x10FFFF, then this is a parse error. Return a U+FFFD REPLACEMENT CHARACTER.

Otherwise, return a character token for the Unicode character whose code point is that number.

だったので無理もないかもしれません。どうでもいいですがパーサーの規定のこんな基本的な部分がコロコロ変わるような状態でどうしてブラウザが「HTML5対応」を名乗れるのか不思議でなりません。仕様が固まるまでMicrosoftが対応を尻込みするのも当然でしょう。

これらの規定は、HTML/XMLにおいてUTF-16のサロゲートペアが使えないという意味ではないことに注意してください。文字参照はUTF-16ではないというだけです。符号位置(code position)/コードポイント(code point)と符号単位(code unit)を混同してはいけません。

BMP外の文字を文字参照で表記するときは、U+10000以上のコードポイントを直接表記するのが正しいやり方ですが、スラッシュドット・ジャパンの日記システムはこの表記をまともに処理してくれません。BMP外の文字を受け付けるように改修するのが大変なら、まともなRSSリーダーには読めないRSSやまともなブラウザが文字化けを起こすHTMLを吐く点(あるいはそういうものの出力につながる入力を受け付ける点)だけでも早く修正していただきたいところです。

もちろん安岡先生はこの程度のことは当然知っていて、BMP外の文字を受け付けないスラッシュドット・ジャパンの日記システムへの抗議のためにわざとやっているのでしょう。

typodupeerror

物事のやり方は一つではない -- Perlな人

読み込み中...