<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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <dfn xml:lang="en"><abbr>NFKC</abbr></dfn> 
(<dfn><ruby>正規化形<rt>せいきかけい</rt><rt xml:lang="en">normalization form</rt></ruby> KC</dfn>)
は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</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>の1つです。</p><p>NFKC は、大まかには、<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:">NFC</anchor> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">正準分解</anchor>を行いますが、
NFKC は互換分解を行います。 NFC も NFKC も、
分解の後には<em>正準</em>結合を行います。
(「互換結合」はありません。))</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><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:">UAX #15</anchor>
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/reports/tr15/#Normalization_Form_KC">http://www.unicode.org/reports/tr15/#Normalization_Form_KC</anchor-external></li></ul></refs></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> 詳しい定義はこうです。
(実装はこれと同じ結果が得られるなら、他の方法を使ってもかまいません。)<ol><li>原始文字列<var xml:lang="en">S</var>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><em xmlns="http://www.w3.org/1999/xhtml">互換</em>分解</anchor>を、
実装が対応している最新版の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCD</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">互換写像</anchor>に従って生成する。</li><li>分解中の最初から最後までのそれぞれの文字 <var>C</var>
について、次の操作を繰り返す。<ol><li><var>C</var> が最後の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">開始子</anchor> <var>L</var> から<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">妨害</anchor>されておらず、 <var>L</var> と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">初等結合</anchor>できるなら、
<var>L</var> を合成 <var>L-C</var> で置換し、 <var>C</var> を削除する。</li></ol></li><li>これによって得られた文字列 <var>S'</var> が <var>S</var> の
<abbr>NFKC</abbr> である。</li></ol></p></section><section><h1>変種</h1><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> <cite xml:lang="en-us">UAX #31: Unicode Identifier and Pattern Syntax</cite> (<time>2008-05-07 05:28:21 +09:00</time> 版) <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/reports/tr31/#NFKC_Modifications">http://www.unicode.org/reports/tr31/#NFKC_Modifications</anchor-external></p><p><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">UAX #31: Unicode Identifier and Pattern Syntax</cite>
( (<time>2013-09-30 19:53:19 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.unicode.org/reports/tr31/#NFKC_Modifications">http://www.unicode.org/reports/tr31/#NFKC_Modifications</anchor-external></p><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite>XRI Syntax Specification</cite>
(<time>2008-03-11 00:22:27 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://docs.oasis-open.org/xri/xri-syntax/2.0/specs/cs01/xri-syntax-V2.0-cs.html">http://docs.oasis-open.org/xri/xri-syntax/2.0/specs/cs01/xri-syntax-V2.0-cs.html</anchor-external></figcaption><blockquote><p>This encoding in UTF-8 MUST include normalization according to Normalization Form KC (NFKC) as defined in <strong>[</strong>UTR15<strong>]</strong>. </p></blockquote></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <cite xml:lang="en">RFC 7564 - PRECIS Framework: Preparation, Enforcement, and Comparison of Internationalized Strings in Application Protocols</cite>
(<time>2015-12-21 04:49:41 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://tools.ietf.org/html/rfc7564#section-9.17">https://tools.ietf.org/html/rfc7564#section-9.17</anchor-external></p><p><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">KS X 1026-1</anchor></p></section><section><h1>互換性</h1><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:">NFKC</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>では使ってはいけません。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>Unicode正規化</anchor> </sw-see></p></section><section><h1>応用</h1><p><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>Character Set</cite>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor</anchor>, <time>2023-03-16T08:27:42.000Z</time>, <time>2023-06-16T10:47:50.023Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.adaic.org/resources/add_content/standards/05aarm/html/AA-2-1.html">https://www.adaic.org/resources/add_content/standards/05aarm/html/AA-2-1.html</anchor-external></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:">IDNA2008</anchor> の <code>Unstable</code>,
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">PRECIS</anchor> の <code>HasCompat</code> の規定にも使われています。</p></section><section><h1>メモ</h1></section></body></html>