※ ChatGPTを利用し、要約された質問です(原文:macでJythonの文字コードについての質問です)
macでJythonの文字コードについての質問です
このQ&Aのポイント
JavaとJythonでやりとりをする際の文字コードについての質問です。
Jythonを使ってJavaとどのようにやり取りするのか、色々と試そうと思ったのですが、文字コードの指定に関してエラーが発生してしまいます。
日本語を使って開発を行いたい場合、どのように設定すれば良いのかわからず困っています。
macでJythonの文字コードについての質問です
Javaを独学で齧った程度で、特にPythonはつい最近知ったばかりのため、質問の仕方が的を射ていないかもしれませんが、質問が足りていなければ、補足したり、試しますので、お答え頂けると嬉しく思います。
使用しているmacは
MacBookPro,13-inch, Early 2011
MacOS 10.7.1
使用してるIDEはEclipseです。
JavaとJythonでやりとりをする際の文字コードについての質問です。
JVMで動くゲームを作ろうと思いまして、一番変更の多い部分にJythonを使ってみたく、
http://www.jython.org/downloads.htmlより、Jython 2.5.2をダウンロードし、指示に従って順繰りにインストールをしました。
その後、Javaプロジェクトを作成し、「外部アーカイブの追加」より、インストールした際に出来た、jython.jarを追加し、
また、EclipseでPyDevを入手し、設定の「Interpreter - Jython」には、同様のjython.jarを通しました。
Eclipseの環境設定→ワークスペース、のテキスト・ファイル・エンコードはデフォルトの(SJIS)になっています。
この環境で、JythonがJavaとどのようにやり取りするのか、色々と試そうと思ったのですが、
スクリプトの文頭に#coding:Shift_JIS、また#coding:SJISなどと入れ、
#coding:Shift_JIS
print "あああ"
という風にして、javaから
PythonInterpreter pi = new PythonInterpreter();
pi.execfile("script/test.py");
と言った形で呼び出すと、
Exception in thread "main" LookupError: unknown encoding 'shift_jis'
といったエラーが出てしまいます。
#coding:Shift_jisの下りを入れなかった場合は
Exception in thread "main" SyntaxError: Non-ASCII character in file 'script/test.py', but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
になります。
ただ、Eclipseの実行をスクリプトだけに焦点をあてている場合は(分りづらい書き方かと思いますが、スクリプトのファイルを選択した状態で実行をするという感じの場合は)、問題なく実行されます。#coding:Shift_JISを書かなければ、SyntaxErrorになります。"SJIS"でも同じでした。
日本語を使わなければ、pi.execfileで読んだり、execで関数を実行したり、
pythonから整数型や英数字のみの文字列を、javaのクラス変数やインスタンス変数に代入して、それをjavaから確認したりすることは出来ます。
また、インストールしたJythonのフォルダのある、User/ユーザ名/jython2.5.2/jython(UNIX実行ファイル)
をダブルクリックして出るターミナル画面から、
>>> unicode("ああああ","Shift_jis")
と入力しても、
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
LookupError: unknown encoding 'shift_jis'
というエラーが出ます。
どうにかして日本語を、可能ならShift_JISで使っていきたいのですが、こういった開発環境にプラスαをしたこと自体初めてなため、
自力でどうすれば解決できるのかわからず、途方にくれています。
拙い質問ですが、解決方法をご教授頂けると、とても嬉しく思います。
お礼
遅くなりましたが、 kmeeさんの回答を元に、jythonのライブラリにそもそも_codecs_jpというモジュールが無いのだと気づき、 それを元に今日、解決に至ることが出来ました。 本当にありがとうございました。
補足
ご回答頂き、ありがとうございます。 解決には至れていませんが、ご教授頂いたことで大変見通しが良くなりました。 CPythonで、そのコマンドを入力した時のリストはとても数が多く、 ['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages'] 一方Jythonでそのコマンドを入力した場合は、 わずか ['', '/Users/Home/jython2.5.2/Lib', '__classpath__', '__pyclasspath__/', '/Users/Home/jython2.5.2/Lib/site-packages'] でした。しかし、Libは含まれていました。 また問題であった、IDEのeclipseで、 そのコマンドのみのスクリプトを書きまして、スクリプトだけを実行したところ、 コンソール画面にはプロジェクトのパス+CPythonでのリストが表示されました。 javaプロジェクトから、このスクリプトを呼び出した場合には、 ['/Users/Home/jython2.5.2/Lib', '__classpath__', '__pyclasspath__/'] となり、Jythonのパスになっていました。 ターミナルのJythonからや、Javaプロジェクト上からがダメで、Eclipseでスクリプトだけを実行した時上手くいったのも、 ご指摘のように、全てJythonのライブラリの認識に問題があるのかなと自分でも理解できました。 encordingsが読まれているかどうかについて、解決の役に立つかわかりませんが(自分でも何をやっているかよく分からないのですが) 入力補完機能の力を借りて適当にアクセスしてみました。 import encodings print encodings.ascii と言った形のスクリプトを、javaプロジェクト上から呼んだ場合は <module 'encodings.ascii' from '/Users/Home/jython2.5.2/Lib/encodings/ascii$py.class'> となり、読みこめてはいるのかなと思いました。 同様に import encodings print encodings.shift_jis としますと スクリプト単体実行では <module 'encodings.shift_jis' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/encodings/shift_jis.pyc'> と表示されますが、 javaプロジェクトからの呼び出しですと Exception in thread "main" Traceback (most recent call last): File "script/test.py", line 2, in <module> print encodings.shift_jis File "/Users/Home/jython2.5.2/Lib/encodings/shift_jis.py", line 7, in <module> import _codecs_jp, codecs ImportError: No module named _codecs_jp と出ました(また、ターミナルからCPhythonを呼んで同様のことをすると、AttributeErrorでした)