2016-03-04 57 views
0

我有關於編碼似乎非常相似,這裏的其他問題有問題,但不完全一樣的,我不知道這整個事情了。錯誤的UTF-8字符書寫時到文件(蟒蛇)

我以爲我已經掌握了編碼的概念,但是我有這些特殊字符(æ,ø,å,ö等),打印時看起來不錯,但不能寫入文件。 (如æ隨着我寫文件)

我的代碼如下:

def sortWords(subject, articles, stopWordsFile): 
    stopWords = [] 
    f = open(stopWordsFile) 
    for lines in f: 
     stopWords.append(lines.split(None, 1)[0].lower()) 

    for x in range(0,len(articles)): 
     f = open(articles[x], 'r') 
     article = f.read().lower() 
     article = re.sub("[^a-zA-Z\æøåÆØÅöÖüÜ\ ]+", " ", article) 
     article = [word for word in article.split() if word not in stopWords] 
     print ' '.join(article) 
     w = codecs.open(subject+str(x)+'.txt', 'w+') 
     w.write(' '.join(article)) 



sortWords("hpv", ["vaccine_texts/hpv1.txt"], "stopwords.txt") 

我曾與各種編碼試過,用codecs.open(文件,R打開文件時,「UTF -8'),但無濟於事。我在這裏錯過了什麼?

我在Ubuntu(從Windows切換,因爲它的終端不會正確輸出)

+0

http://stackoverflow.com/questions/6048085/python-write-unicode-text-to-a-text-file –

+0

@JoeDoherty我見過這個人,我不能用'.encode(「utf-8」)'時我寫,因爲它給我一個錯誤。無論我用它打開文件顯示奇怪的符號(崇高,gedit,vim,記事本)。爲什麼會發生? – LaughingMan

+0

似乎有一個我打開的文件的編碼有問題。我嘗試了兩個獨立的文件,其中一個完美工作。我試圖將該文件的內容複製並粘貼到一個新的文本文件中,然後運行。奇怪 – LaughingMan

回答

1

當您在文本文件中看到類似於(或更一般的2個字符,其中第一個是Ã)的文件時,文件可能是正確的用UTF8編寫,並且編輯器(或屏幕)不能正確處理UTF8。

讓我們看看æ。它是Unicode字符U + E6。當你用utf8對它進行編碼時,它給出了兩個字符b'\xc3\xa6',當它解碼爲latin1時,它將printf 'æ'

,你能做些什麼來確定?至少在使用其圖形界面gvim時,請使用優秀的vim編輯器,該編輯器瞭解多重編碼等utf8。

而只是一個一般性的建議:從未寫非ASCII字符在Python源文件,除非你把# -*- coding: ... -*-行第一行(或第二,如果第一個是hashbang一個#! /usr/bin/env python

如果你想要在Python下使用unicode,請使用本地處理它的IDLE。

TL/DR:如果您使用的是Linux,它很可能是你的系統本身配置爲使用UTF8編碼,而你寫正確的文本文件中UTF8,但你的文本編輯器,只是無法正確顯示UTF8

+0

謝謝,我認爲這是我想我需要的明確答案。我在某個時候嘗試了vim(因爲它客觀上是最好的編輯器),但唉!仍然奇怪的信件。從我所有的編碼/解碼實驗中,我必須得到更多的信息。儘管現在都在工作,但問題在於我讀取的源文件。感謝每一個人! – LaughingMan

0

你嘗試過:

w.write(' '.join(article).encode('utf8'))

,不要忘記關閉您的文件(更好使用with上下文管理器來操作文件)

+0

我已經試過這一點,它給我的'的UnicodeDecodeError:「ASCII」編解碼器不能在66位解碼字節0xc3:在範圍序數不(128) '錯誤 – LaughingMan

+1

什麼類型的類型是(「」。加入(文章)),str還是unicode? – YOBA

+0

'型(」」。加入(文章))'返回_String_ – LaughingMan