簡體   English   中英

Python Unicode字符

[英]Python Unicode characters

我知道這個主題不是新話題,但是我嘗試了很多解決方案,但沒有成功。 我正在使用Python 2.7(不是非常有經驗的用戶)。 我的問題:我讀了一個文件:

my_file=open("file")

然后將一行(其中包含“pitié”一詞保存到變量中,然后將其打印出來)

line=my_file.readline()
print line
>> pitié

在那里,我得到了“皮蒂”。 但是,如果要操作它,我會發現我的變量(字符串)包含一些字節:

line
>> 'piti\xc3\xa9'

我的問題是,當我需要執行一些操作來操縱此字符串時,我需要具有“é”字符。 例如,將其放在Flask模板中。 我嘗試了一些編碼/解碼操作,但是我很困惑。 我得到平常的

UnicodeDecodeError: 'ascii' codec can't decode byte 0x.. in position .: ordinal not in range(...)

打印功能如何提供正確的輸出?

謝謝 !

歡迎來到Unicode世界! 您的文件以UTF-8(一種多字節編碼)保存,因此ASCII范圍在0-127之間的字符需要兩個或更多字節。 使用codecsio模塊讀取文件,並聲明編碼,以便將其讀取為Unicode字符串,並且最多65535的非ASCII代碼點將是單個代碼點。 切換到Python 3.3+,所有Unicode代碼點將成為一個代碼點。

請注意,下面示例的第一行聲明了源文件的編碼。 它不必與數據文件的編碼匹配,而是使用它,因此Python知道源中文字Unicode字符串u'é'的編碼。

#coding: utf8
import io

with io.open('file',encoding='utf8') as my_file:
    line = my_file.readline()
print line
print repr(line)
print line.index(u'é')

輸出:

pitié
u'piti\xe9'
4

您將看到兩種不同的顯示方法: print向您顯示漂亮的版本,而僅鍵入line則為您提供原始的“ repr”版本。 字符串沒有問題。 如果將其寫入文件,它將與原始輸入文件中的一樣。

暫無
暫無

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

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