Hey #b3d peeps!!
BlenderPythonに限って言うと、i18nは表示のみ、と割り切って考えた方があとあと悔しい思いをしなくて済みます…
Windows版ではテキストエディタ部分の日本語直接入力をできないようにしてありますし、OS X版では他の入力項目も直接日本語を入力できません。
BlenderPythonのスクリプト自身に使用する文字コードはUTF-8です。データは知ったこっちゃありません :P
Shift-JISで書かれたスクリプト(例: print(u”あああ") )を実行すると以下のようなエラーが出ることがあります。
Error: File "/sample.py", line 1 SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0x82 in position 0: invalid start byte location: :-1
「SJISでも言語指定のヘッダつけとけば実行できるじゃん」とかいう方は、モグリなんでしょうね :)
以下のようなコードは正常に実行はできても、Blenderのテキストエディタでまともに表示できませんし。
# -*- coding: shift-jis -*- print(u"あああ")
むしろ、こう、ですよね?(Windowsの場合はちょっと事情が違う?)
#!/usr/bin/env python # -*- coding: utf-8 -*- print(u"あああ")
なお、ファイルを保存する場合は"BOMなし"で。
自分自身が使う、または日本語圏の人くらいしか使用しないだろう、ということでコメントに日本語を使う場合には、文字エンコードをUTF-8にして保存しましょう。
もし、公式リポジトリに登録してもらいたい、という場合には、レビューアが日本語読めないと思うのでコメントは英語にしておきましょうね。
スクリプト自身もそうですし、アクセスするファイル名も日本語は避けましょう。
ファイル名を日本語にすることで、エラー発生時の切り分けが難しくなります。ある漢字1文字が正しい実行を邪魔している、というのを追求するのにかける労力は、はっきり言って無駄です。
ついでに言うとオブジェクト名等にも日本語が入っていると、スクリプトでコケる確率が高くなりますのでご注意ください。
Windows環境のcmd.exeでは…
Blenderのテキストエディタ上のスクリプトで日本語をprintすると文字化けしませんか?
print("ああああ")
日本語を含むものに関しては、とりあえず cp932 を指定して標準出力に流し込んであげればいいようです。以下のような関数を作っておくとはかどりますかね?呼び出しは writeln(u"ああああ") のような感じで。
def writeln( s ): sys.stdout.buffer.write(s.encode('cp932')) sys.stdout.buffer.write("\n".encode('cp932')) sys.stdout.buffer.flush()
OSの文字コード は sys.stdout.encoding で取得できるのですが、 Blenderからのcmd.exe に対する stdout の文字コードは utf-8 な様子。お、おう。
BlenderPythonでのUIの言語実装は「勝手にやって」が公式のスタンスです。
また、前提として、"International fonts"を有効にしておく必要がある旨はドキュメントに明記しておくこと、があります。
BlenderPythonによるパネルやメッセージについて日本語にしたい、という場合には自前で切り替えの実装が必要になります。
独自に実装した例 - スクリプト小ネタ置き場
独自に実装した例 - [Blender] Blenderスクリプトを多言語対応させる方法
気軽にソースコードを貼り付けられるサービス、pasteall.org 。日本語貼り付けると文字化けしちゃいますね? gistとか使えばいいんじゃないですか?
まあ方法が無いわけでもなくて。ヒントだけ提示しておきますね?
a = u"はろー" e=a.encode('unicode_escape') print(e) d=e.decode('unicode_escape') print(d) c=b"\\u306f\\u308d\\u30fc".decode('unicode_escape') print(c)