Pythonで文字列から文字コードを求めるのはord()
という関数である。逆に文字コードから文字(列)を求めるのがchr()
だとされている。…であるからして、
chr(ord(str[0])) == str[0]
は常に真であるように思える。しかし、違う。ord()
がUnicodeに対応しているのに対し、chr()
は対応しておらず、chr()
の引数は0〜256の範囲しけ受けつけず、範囲外の値が渡されるとValueError例外を投げてしまうのだ。
これを回避するにはu"%c" %(val)
を使う方法しか私は知らない。
u"%c" %(ord(str[0])) == str[0]
はだいたい常に真のようである。
chr()
の引数に文字コード情報がないというのが間違いではないかと思う。