[英]Proper use of unicode characters in python3 - Force utf-8 encoding
我要瘋了。 互聯網和SO問題告訴我,在python 3.x中,默認編碼為UTF-8。 除此之外,我系統的默認編碼是UTF-8。 除此之外,我的python 3.5文件頂部還有# -*- coding: utf-8 -*-
。
仍然,python正在使用ascii:
# -*- coding: utf-8 -*-
mystring = "Ⓐ"
print(mystring)
問候我:
SyntaxError: 'ascii' codec can't decode byte 0xe2 in position 7: ordinal not in range(128)
我也嘗試過: print(mystring.encode("utf-8"))
和.decode("utf-8")
-一樣。
我在這里想念什么? 如何強制python停止使用ascii編碼?
編輯:我知道用一個字符串抱怨position 7
看起來很奇怪,但這是我的實際MCVE和我得到的確切輸出。 上面是使用python shell,下面是在腳本中。 兩者都使用python 3.5.2
。
編輯:由於我認為這可能是相關的:我要獲取的字符串來自外部應用程序,並且未進行硬編碼,因此我需要一種獲取utf-8字符串並將其保存到文件中的方法。 上面只是一個最小化和通用的示例。 這是我的真實代碼:
# the variables being a string that might contain unicode characters
mystring = "username: " + fromuser + " | printname: " + fromname
with open("myfile.txt", "a") as myfile:
myfile.write(mystring + "\n")
在Python3中,所有字符串都是unicode,因此您遇到的問題很可能是由於您的語言環境設置不正確。 Python3解釋器希望使用語言環境環境變量,如果找不到它們,它將模擬基本ASCII
從locale.py:
except ImportError:
# Locale emulation
CHAR_MAX = 127
LC_ALL = 6
LC_COLLATE = 3
LC_CTYPE = 0
LC_MESSAGES = 5
LC_MONETARY = 4
LC_NUMERIC = 1
LC_TIME = 2
Error = ValueError
仔細檢查正在執行的Shell上的語言環境 。 在完成正確設置環境的任務之前,您可以嘗試以下解決方法,看看它們是否使您工作。
1)驗證是否已安裝UTF-8語言環境或語言文件(請參見上面的鏈接)
2)嘗試將其添加到腳本頂部
#!/usr/bin/env LC_ALL=en_US.UTF-8 /usr/local/bin/python3
print('カタカナ')
要么
#!/usr/bin/env LANG=en_US.UTF-8 /usr/local/bin/python3
print('カタカナ')
或在執行Python解釋器之前導出shell變量
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
python3
>>> print('カタカナ')
抱歉,我不能更具體,因為這些設置是特定於平台和操作系統的。 您可以使用locale模塊直接嘗試在Python中直接設置語言環境 ,但我不建議這樣做,如果未安裝它們將無濟於事。
希望能有所幫助。
Python 3.0的新功能說:
所有文本均為Unicode; 但是編碼的Unicode表示為二進制數據
如果您想嘗試輸出utf-8,請參考以下示例:
b'\x41'.decode("utf-8", "strict")
如果要在字符串文字中使用unicode,請使用unicode轉義及其編碼表示形式。 例如:
print("\u24B6")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.