Utf-8でエンコードされたファイルからの読み取りと印刷を試みる次のPython3コードがあります。
f = open('mybook.txt', encoding='utf-8')
for line in f:
print(line)
Sublime Text 3を使用してビルドすると、次のエラーが発生します。
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 18: ordinal not in range(128)
ただし、python3を使用してターミナルでコードを実行するだけでファイルは機能します。
私のビルド構成は
{
"cmd": ["/usr/local/bin/python3", "$file"]
, "selector": "source.python"
, "file_regex": "file \"(...*?)\", line ([0-9]+)"
}
次のように変更した場合:
f = open('mybook.txt', encoding='utf-8')
for line in f:
print(line.encode('utf-8'))
次に、utf-8でエンコードされたバイト文字列を出力します(これが起こっていると思います)。
b'Hello\n'
b'\xc2\xab\xe2\x80\xa2\n'
b'Goodbye'
しかし、これから画面にUnicode文字を印刷する方法もわかりません...
また、このenv変数を A pythonプログラムは崇高なテキスト3で実行できませんが、bashで成功します )==のように変更しようとしても、修正されません。
答えは実際にはあなたの質問にリンクされた質問にありました-PYTHONIOENCODING
は"utf-8"
に設定する必要があります。ただし、OS Xはばかげており、ターミナルまたは.bashrc
または同様のファイルを介して設定された環境変数を取得しないため、これは他の質問への回答に示されている方法では機能しません。代わりに、その環境変数をSublimeに渡す必要があります。
幸いなことに、ST3ビルドシステム(ST2についてはわかりません)には "env"
オプションがあります。これは、exec.py
に渡されるキーと値の辞書であり、"target"
オプションを設定せずにビルドシステムを実行する役割を果たします。上記のコメントで説明したように、LinuxでST3(ビルド3122)を使用して実行すると、サンプルプログラムは非ASCII文字を含むUTF-8でエンコードされたテキストファイルで正常に機能しますが、OSXで実行される同じバージョンでは機能しないことを示しました。 。実行するために必要なのは、ビルドシステムを変更して次の行を含めることだけでした。
"env": {"PYTHONIOENCODING": "utf8"},
ビルドシステムを保存しました。 ⌘B、およびプログラムは正常に実行されました。
ところで、exec.py
、Packages/Python/Python.sublime-build
、または.sublime-package
アーカイブにパックされたその他のファイルを読みたい場合は、Package Controlを介して PackageResourceViewer
をインストールしてください。コマンドパレットの[リソースを開く]オプションを使用して、個々のファイルを選択するか、[パッケージを抽出](両方の前に「PackageResourceViewer:」またはprv
ファジー検索を使用)パッケージ全体をPackages
フォルダーに抽出します。このフォルダーには、Sublime Text → Preferences → Browse Packages…
(他のオペレーティングシステムではPreferences → Browse Packages…
のみ)。これは、ハードドライブの次の場所にあります。
~/.config/sublime-text-3/Packages
~/Library/Application Support/Sublime Text 3/Packages
C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\Packages
InstallationFolder\Sublime Text 3\Data\Packages
ファイルがPackages
フォルダーに保存されると([リソースを開く]オプションで表示し、変更または保存せずに閉じると、ファイルは上書きされません)、ファイルは.sublime-package
アーカイブに含まれる同じ名前のファイルを上書きします。したがって、たとえば、Python
パッケージのデフォルトのPython.sublime-build
ファイルを編集する場合、変更はPackages/Python/Python.sublime-build
として保存され、メニューからPython
ビルドシステムを選択すると、バージョンのみが使用されます。
おかげで、Sublime Text3の完全なビルドシステムスクリプトが機能します。
ツール->ビルドシステム->新しいビルドシステム
{
"Shell_cmd": "python \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"PYTHONIOENCODING": "utf8"}
}
S3でvenvを使用する場合は、Python + Virtualenv.sublime-buildリソースファイルを更新する必要があることに注意してください。
{
"target": "virtualenv_exec",
"Shell_cmd": "python -u \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",
"env": {"PYTHONIOENCODING": "utf-8"}
}