「MAYAのPythonで日本語で書かれたテキストファイルを読み込んだら文字化けしてしまう」
Pythonでファイルを読み込むには
open()
の関数を使いますが、Python2.x系とPython3.x系ではエンコーディング引数の有無に違いがあります。
Python3.x系のopen関数では
open("textfile","r",encoding="utf-8")
の様に読み込む際に文字コードを指定する事が可能ですが、Python2.x系のopen関数では指定が出来ません。
そのためPython2.x系で文字コードをutf-8で保存した日本語などの2バイトで書かれたテキストファイルをopen()で開くと
textfile_utf8.txt
Python2.7:
textfile = "D:/liquidJumper/textfile_utf8.txt"
open_textfile = open(textfile)
textfile_read = open_textfile.read()
print(textfile_read)
open_textfile.close()
結果:
文字化けしてしまいます。
逾槫・亥キ・kanagawa
蜊・痩:chiba
蝓シ邇・saitama
そしてこの記事の主な対象であるMAYAに実装されているPythonのバージョンを調べてみると。
import sys
print(sys.version)
結果:
MAYA2020に実装されているPythonはPython2.7.11だと分かりました。
あらためてPython2.7のopen関数では文字コードを指定する事は出来ません。
なので通常open関数を使いMAYAで日本語のテキストファイルを読み込む場合は
textfile = "D:/liquidJumper/textfile_utf8.txt"
open_textfile = open(textfile)
textfile_read = open_textfile.read()
print(textfile_read.decode(encoding="utf-8"))
open_textfile.close()
説明:
print(textfile_read.decode(encoding="utf-8"))
読み込んだテキストをdecode()で文字コード変換。
結果:
文字化け無くテキストファイルの内容が出力されました。
神奈川:kanagawa
千葉:chiba
埼玉:saitama
このdecode()で文字コードを変換する一手間を回避し、文字コードを指定してファイルを開く方法として
codecsモジュール
があります。
この記事では、Pythonのcodecsモジュールを使った日本語などのマルチバイトでか書かれたテキストファイルを文字コード指定で読み込む方法を紹介します。
|
Pythonのcodecsモジュールとは
codecsモジュールは文字コードをshift-jisからutf8に変換できるなど、任意にエンコードやデコードを行えるPythonの標準ライブラリモジュールです。
|
Pythonで文字コードを指定してテキストファイルを読み込む
Pythonで日本語を含むマルチバイト文字を読み込む際は、codecsモジュールを使い文字コードを指定して読み込むことができます。
文字コードをutf8で保存したテキストファイル
ファイル名:textfile_utf8.txt
import codecs
textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = codecs.open(textfile, 'r', 'utf-8')
print(open_utf8.read())
open_utf8.close()
説明:
open_utf8 = codecs.open(textfile, 'r', 'utf-8’)
codecs.open()を使って文字コード”utf-8”で開きます
print(open_utf8.read())
代入された変数「open_utf8」をread()で読み込みprint()で出力
open_utf8.close()
Fileオブジェクトopen_utf8を閉じます
結果:
テキストファイルの内容が出力されました
神奈川:kanagawa
千葉:chiba
埼玉:saitama
|
Pythonで文字コードを指定してテキストファイルを作成する
文字コード”utf-8″のテキストファイルに文字列を追記する方法です
文字コードをutf-8に指定したテキストファイル作成しました。
ファイル名:new_textfile.txt
文字コード:UTF-8で保存
# coding:utf-8
import codecs
filepath = "D:/liquidJumper/new_textfile.txt"
textfile_new = codecs.open(filepath ,"a", "utf_8")
textfile_new.write(u"アイウエ:カタカナ")
textfile_new.close()
説明:
textfile_new = codecs.open(filepath ,"a", "utf_8")
文字コード”utf-8”で新規作成
textfile_new.write(u"アイウエ:カタカナ")
テキストの内容を記入
textfile_new.close()
Fileオブジェクトnew_fileをクローズ
結果:
文字コードUTF-8の状態でテキストファイルに文字列が追記されました。
“UTF8” “utf8” “utf-8” “utf_8”
のどれでも実行可能です。
|
MAYAでcodecs()を使って日本語を含むテキストファイルを読み込む
「MAYAで文字コード”utf-8”で保存した日本語が混ざったテキストファイルを読み込む」
open()を使って文字コードを指定しない場合
window = cmds.window()
cmds.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] )
textstr = cmds.textField(w=350,h=100)
cmds.showWindow( window )
textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = open(textfile)
cmds.textField(textstr,e=True,text=open_utf8.read())
open_utf8.close()
説明:
cmds.textField(textstr,e=True,text=open_utf8.read())
open()を使って開いたFileオブジェクトを.read()で読み込み、テキストフィールドに入力
結果:
文字化けしてテキストフィールドに表示されました。
codecs()で文字コードを指定した場合
import codecs
window = cmds.window()
cmds.rowColumnLayout( numberOfColumns=2, columnAttach=(1, 'right', 0), columnWidth=[(1, 100), (2, 250)] )
textstr = cmds.textField(w=350,h=100)
cmds.showWindow( window )
textfile = "D:/liquidJumper/textfile_utf8.txt"
open_utf8 = codecs.open(textfile, 'r', 'utf-8')
cmds.textField(textstr,e=True,text=open_utf8.read())
open_utf8.close()
説明:
open_utf8 = codecs.open(textfile, 'r', 'utf-8')
cmds.textField(textstr,e=True,text=open_utf8.read())
codecs()を使って文字コード”utf-8″に指定して開き、read()で読み込んだテキストファイルの内容をテキストフィールドに入力
結果:
文字化けしないでテキストフィールドに表示されました。
|
まとめ
Pythonで文字コードを指定してテキストファイルを読み込む方法を紹介しました。
Python3.x系と違いPython2.x系のopen関数は文字コードの指定ができません。
そしてこの記事の対象でもあるMAYAのPythonはPython2.x系が使われているため、個人的にMAYAで外部ファイルを取り扱う場合は今回紹介したcodecs()の使用の検討をオススメします。
|
自宅からでもWeb制作・プログラミング・アプリ開発などが習得できるさまざまなコースをラインナップ。
非エンジニアでスキルを磨きたい方から、フリーランス、就職/転職を目指す方まで、専属のメンターがサポート。
最近は副業ブームもあり「 はじめての副業コース 」が人気です。
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|