◆ Windows はデフォルトで cp932 になってるみたい
◆ UTF8 モードにするオプションも pip コマンドや -m pip だと使えないので環境変数で指定
  ◆ PYTHONUTF8=1

ひらがな・ローマ字変換してくれるライブラリ romkan をインストールしようとしたらエラーが出ました

pip install romkan

エラーの原因はこれです

'cp932' codec can't decode byte 0x97

日本語扱うとよくあるやつですが なぜインストールで?

エラーの場所を確認すると README.rst を open して read する箇所でした

「仮名」とか日本語が入ってます
日本語を扱うライブラリですからね
このファイルは UTF-8 でした

処理自体は setup.py に書かれています
README を読んでどうするのかと思ったら setup 関数の引数で description として設定していました

読み取り箇所は

README = open(os.path.join(here, 'README.rst')).read()

と エンコーディングは未指定です
UTF-8 と設定すればできそうですが ローカルのソースではなく pip を使ってインストールなので変えるのも難しいです

というかそもそも Python デフォルトが UTF-8 じゃないの?

REPL で同じコードを実行してみると

>>> open("README.rst").read()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'cp932' codec can't decode byte 0x97 in position 192: illegal multibyte sequence

同じエラーでした

デフォルトのエンコーディングは

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

UTF-8 です
原因がわからず困ってたのですが 調べてみると sys.getdefaultencoding() で取得できるのは文字列とバイトの変換らしく テキストファイルの読み込みでは locale.getpreferredencoding() で取得できるエンコーディングを使ってるようです

>>> import locale
>>> locale.getpreferredencoding()
'cp932'

cp932 でした
デフォルトで UTF-8 でいいのになんでこんな余計なことを……
Windows でも cp932 がデフォルトのメリットなんてないのに

UTF-8 モードを使うには 「-X utf8」 を python コマンドに指定すれば良いみたいですが pip に -X しても意味ないです
-m で pip を実行すればいいかなと

python -X utf8 -m pip

とやってみたのですが ダメでした
新たにプロセスが実行されてそっちでは -X utf8 が通ってない気がします

環境変数でも設定できるみたいだったので Windows の環境変数で PYTHONUTF8 を 1 と設定して実行してみると無事インストールできました
Windows に Python いれるときは常にこの環境変数も設定しておくとよさそうです