簡體   English   中英

使用Sublime Text 3在Python 3中打印UTF-8

[英]printing UTF-8 in Python 3 using Sublime Text 3

我有以下Python3代碼嘗試讀取和打印utf-8編碼的文件:

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變量,則python程序無法在sublime text 3中執行,但在bash中成功則無法解決該問題。

答案實際上是在您的問題所鏈接的問題中PYTHONIOENCODING需要設置為"utf-8" 但是,由於OS X很愚蠢,並且無法使用Terminal中或通過.bashrc或類似文件設置的環境變量,因此無法以其他問題的答案所示的方式工作。 相反,您需要將該環境變量傳遞給Sublime。

幸運的是,ST3構建系統(我不了解ST2)具有"env"選項。 這是傳遞給exec.py的鍵和值的字典,該字典負責運行未設置"target"選項的構建系統。 正如我們在上面的評論中所討論的那樣,我表明您的示例程序在Linux上以ST3(內部版本3122)運行時,在包含非ASCII字符的UTF-8編碼文本文件上可以正常工作,但在OS X上運行的版本與此不同要使其運行,所需要做的就是更改構建系統以包含以下行:

"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
  • \\AppData\\Roaming\\Sublime Text 3\\Packages Windows常規安裝: C:\\Users\\ \\AppData\\Roaming\\Sublime Text 3\\Packages
  • \\Sublime Text 3\\Data\\Packages Windows可移植安裝: \\Sublime Text 3\\Data\\Packages

將文件保存到Packages文件夾后(如果您僅通過“打開資源”選項查看它們,然后關閉而不進行更改或保存,則不會保存),它們將覆蓋.sublime-package包含的.sublime-package文件.sublime-package存檔。 因此,例如,如果您要編輯Python軟件包中的默認Python.sublime-build文件,則Python.sublime-build更改將另存為Packages/Python/Python.sublime-build ,並且從菜單中選擇Python構建系統時,它將僅使用您的版本。

感謝Sublime Text 3的完整構建系統腳本,它可以正常工作

工具->構建系統->新構建系統

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

請注意,如果您將venv與S3一起使用,則需要更新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"}
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM