web-dev-qa-db-ja.com

Sublime Text3を使用してPython 3でUTF-8を印刷する

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で成功します )==のように変更しようとしても、修正されません。

14
allstar

答えは実際にはあなたの質問にリンクされた質問にありました-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.pyPackages/Python/Python.sublime-build、または.sublime-packageアーカイブにパックされたその他のファイルを読みたい場合は、Package Controlを介して PackageResourceViewer をインストールしてください。コマンドパレットの[リソースを開く]オプションを使用して、個々のファイルを選択するか、[パッケージを抽出](両方の前に「PackageResourceViewer:」またはprvファジー検索を使用)パッケージ全体をPackagesフォルダーに抽出します。このフォルダーには、Sublime Text → Preferences → Browse Packages…(他のオペレーティングシステムではPreferences → Browse Packages…のみ)。これは、ハードドライブの次の場所にあります。

  • Linux:~/.config/sublime-text-3/Packages
  • OS X:~/Library/Application Support/Sublime Text 3/Packages
  • Windowsの通常インストール:C:\Users\YourUserName\AppData\Roaming\Sublime Text 3\Packages
  • Windowsポータブルインストール:InstallationFolder\Sublime Text 3\Data\Packages

ファイルがPackagesフォルダーに保存されると([リソースを開く]オプションで表示し、変更または保存せずに閉じると、ファイルは上書きされません)、ファイルは.sublime-packageアーカイブに含まれる同じ名前のファイルを上書きします。したがって、たとえば、PythonパッケージのデフォルトのPython.sublime-buildファイルを編集する場合、変更はPackages/Python/Python.sublime-buildとして保存され、メニューからPythonビルドシステムを選択すると、バージョンのみが使用されます。

35
MattDMo

おかげで、Sublime Text3の完全なビルドシステムスクリプトが機能します。

ツール->ビルドシステム->新しいビルドシステム

{
    "Shell_cmd": "python \"$file\"",
    "file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
    "selector": "source.python",
    "env": {"PYTHONIOENCODING": "utf8"}
}
9
Sunding Wei

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"}
} 
2
Matt Moore