83351


Pythonのプログラムをデバッグしていて気付いた挙動についての質問です。  
よろしくお願いします。

### 質問

Unicode正規化した後に、一文字のみ取り出して大文字にするとウムラウトが取れます。これってUnicodeの規格としては正しい挙動なのでしょうか。

※正しい挙動である場合、何か参考情報があると喜びます。

### 参考情報

  * [Unicode正規化 - Qiita](https://qiita.com/fury00812/items/b98a7f9428d1395fc230)
  * [Unicode正規化 - Wikipedia](https://ja.wikipedia.org/wiki/Unicode%E6%AD%A3%E8%A6%8F%E5%8C%96)

### サンプル

`print(e)` が気になっている結果です。

[code]

    #!/usr/bin/python
    from unicodedata import normalize
    
    a = 'ёлка'
    b = a.upper()
    c = normalize('NFD', a)
    d = c.upper()
    e = c[0].upper()
    f = a[0].upper()
    
    print(a)
    print(b)
    print(c)
    print(d)
    print(e)
    print(f)
    
[/code]

### 実行結果

[code]

    ёлка
    ЁЛКА
    ёлка
    ЁЛКА
    Е
    Ё
    
[/code]


CC BY-SA 4.0
2021-10-31T04:36:45.197
83350
2021-10-31T05:09:34.930
2021-10-31T05:09:34.930
3060
48452
question
python python3 unicode sphinx
Unicode正規化した後に、一文字のみ取り出して大文字にするとウムラウトが取れる


NFDは参考情報に挙げられているUnicode正規化で

> 文字は正準等価性によって分解される

と説明のある通りです。 `ё` U+0451 は `е` U+0435 と トレマ U+0308 の２文字に分解されます。  
`c[0]` と指定すれば１文字目の `е` U+0435 だけが選択されるのは当然の結果です。


CC BY-SA 4.0
2021-10-31T04:58:43.180
83351
2021-10-31T04:58:43.180
4236
83350
answer