2014-09-30 95 views
0

我有一个包含字母txt文件(“øæå”),我想这个脚本来认识这个字母和正确并写入到CSV文件。转换ISO-8859-1到UTF-8(øæå)

with codecs.open('transaksjonliste.txt', 'r', 'ISO-8859-1') as file: 
    for line in file: 

     line = file.readline() 
     lineS = line.encode('ISO-8859-1', 'ignore').decode('utf-8') 
     splitTab = lineS.split(';') 

     for s in splitTab: 
      newS = s[1:-1] 

     date = splitTab[0].replace('.', '/') 
     insertList = [date,] 
     out.writerow(date) 

给出:

File "Q:\DropBox\Development\Scripts\tes2.py", line 17, in <module> 
    lineS = line.encode('ISO-8859-1', 'ignore').decode('utf-8') 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf8 in position 14: invalid start byte 
+2

为什么你都循环*和*调用'readline()'?为什么编码Latin-1然后从UTF-8解码?你的数据不是编码错误,那个奇怪的舞蹈是什么原因导致你的异常。 – 2014-09-30 09:28:36

+0

您还忽略'insertList'并没有告诉我们out'是什么';是一个'csv.writer()'对象? – 2014-09-30 09:36:01

+0

对不起,我的无知。不知道不需要调用readline()。 @MartijnPieters insertList是一项正在进行的工作,但不应该成为这里的问题。是的失是csv.writer()对象。感谢您的提升 – RoarG 2014-09-30 17:02:37

回答

0
with codecs.open('transaksjonliste.txt', 'r', 'ISO-8859-1') as file: 
    for line in file: 

     line = file.readline() 
     lineS = line.encode('ISO-8859-1', 'ignore').decode('utf-8') 
     splitTab = lineS.split(';') 

删除line = file.readline(),你已经通过与for line in file结构的线迭代(读)。

lineS = line.encode('ISO-8859-1', 'ignore').decode('utf-8') 

不会是你想要的,因为这对编码ISO-8859-1,然后尝试,如果它是UTF-8的ISO-8859-1进行解码。如果您想为“ISO-8859-1”转换为UTF-8,你通常想做

lineS = line.decode('ISO-8859-1', 'ignore').encode('utf-8') 

但是你已经转换从“ISO-8859-1”的数据(为unicode )在codecs.open()表达式中。所以你只需要做

lineS = = line.encode('utf-8')