我有一個基於GAE和Python的網站,我希望用戶能夠上傳文本文件進行處理。我的實現是基於從文檔(見http://code.google.com/appengine/docs/python/blobstore/overview.html)和我的文本文件上傳處理標準代碼基本上是這樣的:確定上傳到Google App Engine的文件的編碼
class Uploader(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('file')
blob_info = upload_files[0]
blob_reader = blobstore.BlobReader(blob_info.key())
for line in blob_reader:
line = line.rstrip().decode('cp1252')
do_something(line)
blob_reader.close()
也能正常工作與代碼頁1252,編碼的文本文件,這是你會得到什麼當使用Windows記事本並保存它所謂的「ANSI」編碼時。但是,如果你使用這個處理程序的文件已經用記事本的UTF-8編碼保存,並且包含一些西里爾文字符或者U變音符號,那麼你最終會得到一些亂碼。對於這樣的文件,將解碼('cp1252')更改爲解碼('utf_8')將會起作用。 (好吧,在開始時也有一個字節順序標記(BOM)的可能性,但這很容易被剝離。)
但是,您如何知道要使用哪種解碼?物料清單並不保證在那裏,除了詢問可能不知道的用戶外,我沒有看到任何其他方式知道。有確定編碼的可靠方法嗎?如果有其他方法解決它,我不一定非要使用blobstore。
然後是Windows記事本稱爲「Unicode」的編碼,這是一種UTF-16小端編碼。我無法找到解碼(包括「utf_16_le」),該解碼正確解碼用此編碼保存的文件。可以讀取其中一個文件嗎?
我不知道我在前期搜索時如何錯過了這個,但無論如何,我很感激知道chardet。我已經學會了我學到的知識,並將自己的答案張貼在我的問題上,這對面臨同樣問題的其他人應該是有幫助的。 – Dragonfly