title: unicodedata.decomposition() vs. unicodedata.normalize(NFD/NFKD)?
body: <p>According to py3 <a href="https://docs.python.org/3/library/unicodedata.html#module-unicodedata" rel="nofollow noreferrer">doc</a>:</p>
  
  <blockquote>
    <p><strong>unicodedata.decomposition(<em>chr</em>)</strong></p>
    
    <blockquote>
      <p>Returns the character decomposition mapping assigned to the character <em>chr</em> as string. An empty string is
      returned in case no such mapping is defined.</p>
    </blockquote>
  </blockquote>
  
  <p>Here I don't quite understand how <strong><em>character decomposition mapping</em></strong> is defined and what's the relationship/difference between <code>unicodedata.decomposition()</code> and <code>unicodedata.normalize(NFD/NFKD)</code>?.</p>
  
  <p>See following examples:</p>
  
  <pre><code>$ python3
  &gt;&gt;&gt; import unicodedata
  &gt;&gt;&gt; unicodedata.decomposition('⑴')
  '&lt;compat&gt; 0028 0031 0029'              &lt;-- why not just '0028 0031 0029'?
  &gt;&gt;&gt; unicodedata.normalize('NFKD', '⑴')
  '(1)'
  &gt;&gt;&gt; unicodedata.decomposition('①')
  '&lt;circle&gt; 0031'                        &lt;-- why not just '0031'?
  &gt;&gt;&gt; unicodedata.normalize('NFKD', '①')
  '1'
  &gt;&gt;&gt; unicodedata.decomposition('è')
  '0065 0300'                            &lt;-- like this?
  &gt;&gt;&gt; unicodedata.normalize('NFD', 'è') == '\u0065\u0300'
  True
  &gt;&gt;&gt;
  </code></pre>