はじめに
pythonのdictでkeyを日本語に設定すると、keyerrorに直面しました。
見た目は同じなのに、KeyErrorですと言われたときの解決方法です。
半ば強引ですがとりあえずこれでなんとかなります。
解決策
import unicodedata
KeyMatched_str = unicodedata.normalize('NKFC', KeyError_str)
原因
dictでKeyErrorになる原因は、日本語の濁点や半濁点にありました。
どういうことかというと、utf-8では「ど」などの濁点・半濁点のつく文字には以下の二通りの表現方法があるためです。
- 単純に「ど」
- 「と」+「濁点」
パソコンで表示される上では、上の2つは全く同じ文字ですがutf-8などで表示すると違うことがわかります。
試しに以下のコードを実行してみます。
print(b'\xe3\x81\xa9'.decode('utf-8'))
print(b'\xe3\x81\xa8\xe3\x82\x99'.decode('utf-8'))
print(b'\xe3\x81\xa8'.decode('utf-8'))
--result--
ど
ど
と
このように、違うことがわかります。
Pythonのdictはこの違いも判別しているらしく、KeyErrorが発生してしまうことがあるようです。
参考
ほぼ参考サイトのコピペです。。。