2013-04-01 30 views
0

我想了解utf-8 ascii和unicode之間的區別。我已經讀過這Unicode, UTF, ASCII, ANSI format differences。 但我得到一些錯誤@python,我不知道我怎麼能看到我的字符串有哪種格式。Utf-8 - ascii - unicode - 例子[Python]

例如:由於 'U'

1# 'Klaus-Groth-Straße, Ballahausen' 
2# 'Capit\xe1n\n' 
3# u'Capit\xe1n\n' 

3#= unicode的?
1#=?
2#=?


我已經tryed寫串1#到一個文件,寫了自己的一個小功能

def escape(html): 
html=html.replace('ö','ö') 
html=html.replace('Ö','Ö') 
html=html.replace('ä','ä') 
html=html.replace('Ä','Ä') 
html=html.replace('ü','ü') 
html=html.replace('Ü','Ü') 
html=html.replace('ß','ß') 
return html 

之前,我該怎麼寫我的字符串到一個txt文件,我會代替字母來獲得在我的txt文件(克勞斯 - 格羅斯,STRA ß E,諾爾登堤岸布赫霍爾茨)

但它不工作的權利拼寫:/

你能告訴我哪一種米y 3個例子屬於unicode/ascii/utf8?和我怎樣寫正確的拼寫一個txt使用字符串像1#

Tyvm

+3

[如何停止的痛苦?(http://nedbatchelder.com/text/unipain.html) –

+0

再舉例來說,#1,看http://stackoverflow.com/questions/1208916/decoding-html -entities-with-python –

回答

0

你是正確的,例如#3是因爲領導u的Unicode字符串。這可能是最容易處理的。

#1和#2都是字節串。 #1完全由ASCII字符組成,因此您不會從中得到任何Unicode錯誤;但是它包含一個HTML實體,您可能希望將其轉換爲字符。有多種轉換HTML實體的策略,請參閱Decoding HTML entities with Python。結果應該是一個Unicode字符串。

#2包含一個不是ASCII的字符,但它也不是Unicode。如果它是一個UTF-8字符串,那麼至少有兩個十六進制字節,但你只有一個。這意味着它是其他字符編碼的一部分,需要在使用它之前進行解碼。 Windows 1252代碼頁可能是一個很好的猜測。

>>> 'Capit\xe1n\n'.decode('cp1252') 
u'Capit\xe1n\n' 
>>> print 'Capit\xe1n\n'.decode('cp1252') 
Capitán 

當您寫回到某個文件時,您需要將Unicode字符串轉換回字節字符串。用字符串上的encode方法做到這一點。你需要決定你想要你的文件是什麼編碼。

f.write(u'Capit\xe1n\n'.encode('utf-8') 

f.write(u'Capit\xe1n\n'.encode('cp1252') 
+0

非常感謝! – user2195049

0

如果不真正瞭解什麼是錯的,我有我自己遇到了類似的問題,我現在解決了。 我使用Delphi9,而我的問題是從一個文件讀取UTF8,然後再寫回來。爲了長話短說,在寫作時,各種口音和/或墳墓或類似物都從字母中消失。 編碼或解碼UTF8的工具似乎沒有完全完成這項工作,或者Delphi本身在後臺做了一些隱藏的工作。

我最終編寫了我自己的UTF8解碼器和編碼器,現在一切都完美無瑕。 UTF8方案其實很簡單。一點點移位和增加,你在解碼和編碼。 我用這個:「http://tools.ietf.org/html/rfc3629」 作爲我工作的參考。

至少它給了你對UTF8標準的完美解釋。