kazu22002の技術覚書

PHPer, Golang, AWS エンジニアの日々

windowsでファイル操作の日本語対応 少し進展しました。

windowsでファイル操作を利用して作りたいプログラムがあり挑戦中です。

 

以前、日本語での対応で挫折中と書きましたが、すこし動いたので掲載します。

現在pythonに絞ってチャレンジ中。

 

まず前回から変えたのは文字コードは「cp932」でやっています。pythonなので文字列の扱いはUnicodeでやるように心がけています。

これで濁点や特殊文字以外の日本語の文字列は扱えるようになりました。

(もしかしたら前回からできていたかもしれないですね。)

 

つぎにエラーになっている文字化けから考察です。

「ブログ」⇒「フ?ロク?」

 

文字列を表示しようとしているだけで

「'cp932' codec can't encode character u'\u3099' in position 25: illegal multibyte sequence」

というエラーが発生します。

 

いまPHPではないので、ちょっと違うかもしれないですがUnicodeの正規化というものが影響しているのかと考えています。

Unicode 片仮名 - CyberLibrarian

 

「ブ」の表現方法が「濁点付き片仮名フ」となっており「30D5(フ) 3099(゛)」になっているのかと。

pythonで文字を扱うときはUnicodeにしたほうがいいということでやっていますが、こういうのもあるのかと思いました。

Unicode正規化 - Wikipedia

 

現状このエラーが出るのは無視してプログラムを動作させてみたら期待どおりの動きができているので、アルゴリズムが間違っていないと安心しました。

 

ただちょっと対応自体がかなりやっかいなのかと悩んでいます。

他のエラーでも

「u2664」も出てきた。文字としては特殊だけどファイル名にできる時点で困ってますね。

濁点と半濁点だけならなんとかUnicodeの数値を操作すればいけるとおもってましたが、特殊な文字だけはなんとも対応に悩みます。

ちゃんとした対応はどうすればいいかわからないので、試行錯誤中です。

 

他にもこんなエラーが途中で出てました。

「UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-12: ordinal not in range(128)」

文字列をUnicodeに変換してなんとかしようと前回から戦っていた時でしょうか。

(ちょっと記憶にないけどUTF-8でやっていた時だと思います)

 

他にもちょっとハマったのは、エディタが影響している可能性が少し・・・

cp932が使えないエディタを使っているっぽいです。

コマンドプロンプトでやったら違うエラーになってるので、ちょっと困惑中です。

 

すこしPythonにもなれましたが、この辺は経験だと思ってちょっと意地でも解決しようとしています。

 

 

Windowsで動作するプログラムを書いてて、日本語で挫折中 - kazu22002の技術覚書