簡體   English   中英

在python3中正確使用unicode字符-強制utf-8編碼

[英]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.

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