<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> ある<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">開始子</anchor>との関係で<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">妨害されている<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">blocked</rt></rubyb></dfn>とは、
両者の間に他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基底文字</anchor>やより<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合クラス</anchor>の小さな<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合文字</anchor>が挟まっているために、
両者を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準結合</anchor>できないことをいいます。</p><section><h1>定義</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> </p><blockquote><p><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">開始子</anchor> <var>S</var> で始まる文字列において、
<var>S</var> と文字 <var>C</var> の間に文字 <var>B</var>
があって、 <var>B</var> が開始子であるか、
または <var>B</var> が <var>C</var> と<del>同じ</del><ins><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以上</anchor>の</ins><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合クラス</anchor>を有するとき、
この場合に限って、 <var>C</var> は <var>S</var> から<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">妨害されている<rt xmlns="http://www.w3.org/1999/xhtml">blocked</rt></rubyb></dfn>。
(<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/reports/tr15/#D2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.unicode.org/reports/tr15/#D2</anchor-external>)</p></blockquote></section><section><h1>訂正 #5</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 3.0.0 から <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 4.0.1 までは <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal> の定義において
「<var>B</var> が <var>C</var> と<em>同じ</em><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合クラス</anchor>を有する」とされていましたが、これでは問題があることが分かり、
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">訂正<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">Corrigendum</rt></rubyb> #5</dfn> で「<var>B</var> が <var>C</var> <em><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以上</anchor></em>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">結合クラス</anchor>を有する <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;6</anchor-internal></src>」
に改められています。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 4.1.0 以後これが反映されています。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <cite xml:lang="en-us">Corrigendum #5: Normalization Idempotency</cite> (<time>2011-04-01 06:49:32 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/versions/corrigendum5.html" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.unicode.org/versions/corrigendum5.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <cite>Normalization Issue</cite> (<time>2004-10-28 06:57:26 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/review/pr-29.html" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.unicode.org/review/pr-29.html</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <cite xml:lang="en-us">UAX #15: Unicode Normalization Forms</cite> (<time>2010-09-18 09:52:06 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/reports/tr15/#Corrigendum_5_Sequences" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI">http://www.unicode.org/reports/tr15/#Corrigendum_5_Sequences</anchor-external></li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> この定義の誤りにより、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規化形</anchor> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NFC</anchor> など) は何度適用しても結果が変わらないはずでしたが、
実際には2度適用すると結果が変わってしまうことがありました。 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode Consortium</anchor> 
はごくごく例外的なケースであって、現実的には存在しない文字列 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;8</anchor-internal>、<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;9</anchor-internal> 11.2</src> でのみ発生していたとしています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 4.1 以降は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い正規化安定性</anchor>が保証されることになっていますが、 4.1
に先立って行われたこの修正の前後では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">強い正規化安定性</anchor>は成立していません。
また、それ以前から保証される<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">弱い正規化安定性</anchor>も結果的に成立していないと言えるかもしれません。
(もっとも、非互換変更が原因ではなく、
同じ版であっても<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規化</anchor>済みの<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>を更に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正規化</anchor>できてしまうという不具合なのですが。)</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> この訂正以前の実装においては、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UAX #15</anchor> に厳密に従っていて同様に問題を孕んでいるものと、
(偶然か必然か) 訂正後の仕様と同等の動作をするもののどちらもあったようです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;9</anchor-internal> 11.3</src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> この訂正の影響を受ける<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>については <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;9</anchor-internal> に示されています。</p></section><section><h1>メモ</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <var>B</var> が <var>C</var> を妨害している場合には、
そのままなら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準結合</anchor>できても、
<var>B</var> と <var>C</var> の順序を入れ替えると正準結合できなくなることがあります。</p><p>結合文字列が正準順序で並んでいるときには、
ある文字が妨害されているかどうかの検査は直前の文字を見るだけで行えます。</p></section></body></html>