簡體   English   中英

寫入文件時錯誤的utf-8字符(python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM