저는 GAE 및 Python을 기반으로하는 웹 사이트를 보유하고 있으며 처리를 위해 사용자가 텍스트 파일을 업로드 할 수 있기를 바랍니다.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로 인코딩 된 텍스트 파일에 대해 잘 작동 당신이 무엇을 얻을이다 : 내 구현은 워드 프로세서 (http://code.google.com/appengine/docs/python/blobstore/overview.html 참조) 내 텍스트 파일 업로드 핸들러에서 표준 코드를 기반으로 본질적으로 다음과 같습니다 Windows 메모장을 사용하고 "ANSI"인코딩으로 저장하면됩니다. 그러나이 핸들러를 메모장의 UTF-8 인코딩으로 저장 한 파일과 함께 사용하고 키릴 문자 또는 u- 움라우트가 포함되어 있으면 결국 횡설수설로 끝날 것입니다. 이러한 파일의 경우 디코드 ('cp1252')를 디코딩 ('utf_8')하면 트릭이 수행됩니다. (음, 처음에는 바이트 순서 표시 (BOM) 가능성이 있지만 쉽게 제거됩니다.)
그러나 사용하는 디코딩은 어떻게 알 수 있습니까? BOM은 거기에있을 것이라고 보장 할 수 없으며 사용자에게 물어 보는 것 외에 다른 방법을 알지 못합니다. 누가 알지도 모르는 사람입니다. 인코딩을 결정하기위한 신뢰할 수있는 방법이 있습니까? 다른 방법으로도 해결할 수 있다면 블롭 스토어를 사용할 필요는 없습니다.
그리고 Windows 메모장에서 UTF-16 little endian 인코딩 인 "유니 코드"라고하는 인코딩이 있습니다. 이 인코딩으로 저장된 파일을 올바르게 디코딩하는 디코딩 ("utf_16_le"포함)을 찾을 수 없습니다. 이 파일들 중 하나를 읽을 수 있습니까?
내가 사전 게시 검색 중에 어떻게 이것을 놓쳤는지 모르겠지만, 어쨌든 나는 chardet에 대해 알고있어 감사합니다. 나는 배운 것을 가져 왔고 나의 질문에 대한 내 대답을 게시했다. 이것은 같은 문제에 직면 한 다른 사람들에게 도움이 될 것이다. – Dragonfly