2015年1月21日水曜日

文字のエンコードについて〜Python with Xcode 6 補足〜

先日の記事

Xcode 6でPythonの開発を行う(Mac)

の補足です。

文字エンコードについて。
ソースのエンコード、システムのエンコード、ファイル入出力のエンコードなどそれぞれありますが、たぶん、こんがらがらないためには、統一しておくのが一番かと思います。もちろん合わせなきゃいけない場面もあるでしょうが、自分で使う分には統一が一番ですよね!?
Defaultは基本的にPython 3系では標準がUnicode形式になりましたが、Python2.x系ではUS-ASCIIになっており、日本語を入力できなかったり非常に不便ですので、変更方法などご紹介します。プログラムで処理することもできますが、コーディングしやすくなります。

以下、Python2.x系に向けた記事です。

<ソースコードのエンコード>
Pythonでソースコードを書くときは、基本的に、1行目でエンコード形式を指定します。ASCIIでは、たとえコメントにでも日本語を入力したとき、そのままの設定ではエラーになってしまいます。

僕の場合は、Xcodeの標準に合わせ、
# coding: UTF-8
にしました。Xcode側からも、右側のText Encodingから変更などできます。
(vim形式、emacs形式など、表記法にも複数あるようです。大文字・小文字は区別されません。)
これで、日本語も記述できるようになります。

ただ、例えば文字列の長さを取得したいとき、len(u'日本語')=3ですが、len('日本語')は3ではありません。こういう点ではやはりunicodeが便利で、Python3系が羨ましくなります。また、どの文字コードがいいのかわかりません・・・

<システムのエンコード>
次に、デフォルトのエンコードについて。デフォルトでは、入出力もUS-ASCIIになっており、不便です。よって、これをUTF-8に書き換えたいところです。(ただ、設定の書き換えなので自己責任で!)

方法は、sitecustomize.pyというファイルを作り、
import sys
sys.setdefaultencoding("utf-8")
を入力して保存。
Macintosh HD->ライブラリ->Python->2.7->site-packages->にファイルをコピーすれば完了です。
確認は、Pythonを対話モードで起動して、
import sys
sys.getdefaultencoding()
を実行すれば、defaultencodingを表示させることができます。utf-8になっていれば設定完了です。

<ファイル入出力のエンコード>
今回僕が躓いたのは、Excelで適当に出力したCSVファイルをMac上でのPythonで動かそうとした時です。CSVファイルは、表などを特定の文字で区切って保存する形式です。Pythonの標準モジュールCSVを使うと、簡単に読み込めます

まず、プレビューで見ても、日本語に対し、文字化けが発生しました。これは、そのCSVファイルをテキストディットで開き、何もしないまま保存すると、なおります。
見るだけならこれで十分ですが、これでは文字エンコードが何かわからなくて、プログラムで読むにはこまります。

そこで、文字コード統一のメリットを活かして、文字化けしなくなったファイルをNumbersで開き、ファイル→書き出す→CSVから、テキストエンコーディングを「Unicode (UTF-8)」を選択し、書き出します。
これで、そのまま読めるようになります。



以上書いたのは、とても基本的なことですが、プログラム(encode, decode)で処理するよりも外部で処理したほうが簡単で、コーディングがとてもしやすくなりますよ!

リストの中の文字列を表示する方法など、こちらで紹介されています→japaneseCharset

0 件のコメント:

コメントを投稿