[英]wrong utf-8 characters when writing to file (python)
我在編碼方面遇到的問題似乎與此處的其他問題非常相似,但並不完全相同,我無法弄清整個問題。
我以為我已經掌握了編碼的概念,但是我有這些特殊字符(æ,ø,å,ö等),這些字符在打印時看起來不錯,但無法寫入文件。 (例如,當我寫入文件時,æ變為Ê)
我的代碼如下:
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(file,r,'utf-8')打開文件,但無濟於事。 我在這里想念什么?
我在ubuntu上(從Windows切換,因為其終端無法正確輸出)
當您在文本文件中看到諸如Ã(或更通常為2個字符,第一個字符為Ã)之類的文件時,很可能該文件已正確以UTF8編寫,並且編輯器(或屏幕)未正確處理UTF8。
讓我們看一下æ
。 它是Unicode字符U + E6。 當您在utf8中對其進行編碼時,它會給出兩個字符b'\\xc3\\xa6'
並在解碼為latin1時'æ'
。
您可以做什么確認? 至少在使用圖形界面gvim
時,請使用出色的vim編輯器,該編輯器了解多種編碼以及utf8等。
還有另一條一般性建議: 切勿在python源文件中寫入非ascii字符,除非您輸入# -*- coding: ... -*-
作為第一行(如果第二行是hashbang則為第二行#! /usr/bin/env python
)
而且,如果您想在Windows和Python下使用unicode,請使用IDLE對其進行本地處理。
TL / DR:如果使用的是Linux,則很可能是系統已本機配置為使用utf8編碼,並且已正確地將文本文件寫入utf8,但文本編輯器只是無法正確顯示utf8
你有沒有嘗試過:
w.write( ' '.join(article).encode('utf8') )
並且不要忘記關閉文件(更好地with
上下文管理器with
使用來操縱文件)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.