Python Windowsで機種依存文字を扱う

普段Macでしか、開発系をいじることはないのでいまいちよくわかりません。
各々のOSに特殊な文字がいくつか設定されていることは
当たり前のこととしてしっていましたし個人的にはそういった文字を
使わないのですがファイル名なんかに使用されていたり、
webページのような何かしらのソーステキストを利用したりしようとして
エラーが発生したりしたので対応策を備忘録としてのこします。

たかだか文字のことなんですが、今だに理解しきれていません。
基準が色々あるというのはなかなかに厄介です。
そもそもwindowsが普段utf-8ではないことに起因しているようなのですが、、、
だからと言ってwindowsだけの問題でもないのでしょう。
ではどういった場合につまづいたかというと
ffmpegで動画変換をかけるPythonコードを書いていてつまづきました。
ファイル名をutf-8にエンコードし
それからwindows用のコマンドとして整えて
python上からsubprocessをつかってコマンドを実行
といった流れのものです。
具体的な文字としては’🈞’でして、普通は再放送の時にしか使われないと思うんですけど、
なぜかリテイクの時についてるものがあり、引っかかったというわけです。
調べてみたら他にも’🈡’みたいに最終回にしか使われなさそうなものもあるようです。
これももしかすると新人類は最終完パケ版につけるかもしれないのでノーマークというわけにはいきません。
でこれらの文字がはいっていると
UnicodeEncodeError: 'cp932' codec can't encode character ''' in position 0: illegal multibyte sequence
と言われます。
一応、ファイル名をfor~inして確かめてみるとどれで引っかかるかはわかります。

ということで対応策ですが
utf-8からcp932に戻す時に、当該文字がないということらしいので
変換はできないということのようです。
結構web情報で散見されるのは、ignoreオプションをつけろってことが書いてあったりするんですけど
ファイル名なんでそれじゃー、ノーサッチファイルオアディレクトリーなわけです。
Rawなファイルのままじゃ打つ手なしなんだろうな、、、と思ったら、
なんと!
※ちなみに話は使用中のWin10Proということを前提にすすめますので一応。
[Windowsメニュー]>[Windowsシステムツール]>[コントロールパネル]>[時計、言語、および地域]>[日付、時刻、または数値の形式の変更][管理]タブ

[システムロケールの変更]
「ベータ、ワールドワイド言語サポートでUnicode UTF-8を使用(U)」
にチェックして再起動
そーして、cp932に変換していたコマンド部分をutf-8になるようにコードを変更すると
普通に変更できました。なんなんだこの使用。。。
ベータとかいってないでこっちをスタンダードにしてほしい。



コメントを書く