2010-11-28 56 views
21

我試圖用Python編寫一個腳本爲UTF-8文件轉換成ASCII文件:Python腳本從UTF-8轉換爲ASCII

#!/usr/bin/env python 
# *-* coding: iso-8859-1 *-* 

import sys 
import os 

filePath = "test.lrc" 
fichier = open(filePath, "rb") 
contentOfFile = fichier.read() 
fichier.close() 

fichierTemp = open("tempASCII", "w") 
fichierTemp.write(contentOfFile.encode("ASCII", 'ignore')) 
fichierTemp.close() 

當我運行此腳本我有以下錯誤:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 13: ordinal not in range(128)

我認爲可以忽略編碼方法中忽略參數的錯誤。但似乎不是。

我打開其他方式轉換。

+2

問題是,你從來沒有解碼的第一個地方。 – 2010-11-28 23:23:42

+0

由於字符不存在於ASCII字符集中,所以您得到了錯誤,因此無法轉換。有時可以將UTF8字符映射爲ASCII中最接近的可視字符,如`e`到`e`,但這可以改變單詞的含義。您必須決定該路徑是否適用於您的應用程序。 – 2010-11-28 23:24:45

+0

這似乎是一個非常糟糕的主意! – tchrist 2010-11-28 23:55:19

回答

38
data="UTF-8 DATA" 
udata=data.decode("utf-8") 
asciidata=udata.encode("ascii","ignore") 
+13

聽起來像是一個不好的數據丟失配方。 – tchrist 2010-11-28 23:55:45

6
import codecs 

... 

fichier = codecs.open(filePath, "r", encoding="utf-8") 

... 

fichierTemp = codecs.open("tempASCII", "w", encoding="ascii", errors="ignore") 
fichierTemp.write(contentOfFile) 

... 
5

UTF-8是ASCII的超集。無論您的UTF-8文件是ASCII碼,還是不能無損轉換。