2010-11-28 111 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码,还是不能无损转换。