2012-05-26 31 views
2

我在谷歌應用程序引擎與Python 2.5。我的應用程序必須處理多語言,所以我必須處理utf-8。Python和UTF-8:有點困惑

我已經做了很多谷歌,但沒有得到我想要的。

1.使用# -*- coding: utf-8 -*-的用法是什麼?

2.什麼是

s=u'Witaj świecie' 
s='Witaj świecie' 

'WitajŚwiecie的' 之間的差爲UTF-8字符串。

3.當我將.py文件保存爲'utf-8'時,在每個字符串之前是否仍需要u

+4

1.重複的:http://stackoverflow.com/questions/4872007/where-does-this-come-from-coding-utf-8 2.重複的:http://stackoverflow.com/questions/ 4172652/python-what-does-u-represent 3.您將在Python的優秀文檔中找到完整的答案:http://docs.python.org/howto/unicode.html#unicode-literals-in-python-source-代碼 – bernie

+1

解釋如何處理python代碼中的unicode字符串http://stackoverflow.com/a/10650469/624829 – Boud

回答

6

u'blah'它變成串的不同種類(類型unicode而非str類型) - 它使Unicode代碼點的序列。沒有它,它是字節的序列。只有字節可寫入磁盤或網絡流,但您通常希望使用Unicode(儘管Python和一些庫會爲您執行一些轉換) - 編碼(utf-8)是這些。所以,是的,你應該在所有文字前使用u,這會讓你的生活變得更容易。有關更好的解釋,請參見Programatic Unicode

編碼行告訴Python您的文件是什麼編碼,以便Python可以理解它。再次,從磁盤讀取字節 - 但Python希望看到字符。在Py2中,代碼的默認編碼是ASCII,因此編碼行可以讓您直接將諸如ś之類的東西放在.py文件中 - 除此之外,它不會改變代碼的工作方式。

+0

嗨,謝謝。 u'Witajświecie'和unicode(u'Witajświecie','utf-8')和unicode('Witajświecie','utf-8')有什麼區別? –

+0

@SusanMayer第一個和最後一個會得到相同的結果(在utf8編碼的.py中),但以不同的方式進行:第一個從解析器得到unicode字符串,最後一個生成一個字節字符串,然後要求Python使用utf-8從它構建一個unicode字符串。這與'[1,2]'和'list((1,2))'之間的區別大致相同。中間一個是錯誤的:第一個參數已經是一個unicode字符串,並且您告訴Python將其視爲utf8編碼的字節字符串 - 這是沒有意義的。 – lvc

+0

'unicode('Witajświecie','utf-8')'和unicode('Witajświecie')'有什麼區別?如果它是一個'utf-8' .py文件,沒有區別嗎?如果它不是'utf-8'文件,有什麼區別嗎?謝謝! –