在读取和写入文件时,我遇到了编码utf-8的问题。我有一个CSV文件,包含丹麦语和瑞典语字母(ÅÄÖeto)。我想读取此文件并提取字段 - 并操纵数据(以创建URL)。
我正在努力解决的问题如下:
\xd6
而不是ö
。 我尝试了以下内容:
# -*- coding: utf-8 -*-
Companies = codecs.open("Axel_List.csv", "r", "utf-8")
(使用codecs lib读取文件),产生此错误 - 'utf' codec can't byte 0xe4 in position 0
url=u'http://www.proff.se/bransch-sök?q='
和url='http://www.proff.se/bransch-sök?q='
后跟url.decode('utf-8')
,当我尝试加入两个字符串时会产生相同的错误:UnicodeEncodeError 'ascii codec can't encode character u'\xf6 in position 29
我可以打印公司(即使它们不包含正确的字母)和网址分开,所以当我加入它们时会发生一些事情。
# -*- coding: utf-8 -*-
import re
import codecs
import os, sys
Google_urls=open('google_Urls','w')
Proff_urls=open('Proff_Urls','w')
Companies=("Company_List.csv")
for line in Companies:
fields = line.split(",")
if fields[10]=="Sweden":
Company=(fields[1]).split("/v")
Company=str(Company).replace('[',"")
... stripping and manipulating the records
...
Company=Company.decode('utf-8')
url='http://www.proff.se/bransch-sök?q='
url=url.decode('utf-8')
Proff_se= ''.join((url,Company,"\n"))
Proff_urls.write(Company)
else:
continue
为什么我一直认为在阅读文件时有一些奇怪的事情是我测试了这个,它运行正常。
# coding=utf-8
Svenska="äöå"
Dan_Nor="æøå"
Svenska=Svenska.decode('utf-8')
Dan_Nor=Dan_Nor.decode('utf-8')
string3 ="".join((Svenska,Dan_Norlow,Dan_NorCapital))
print string3
在此先感谢,我已经阅读了很多与这些相关的问题,但我无法真正理解它。
答案 0 :(得分:0)
问题几乎可以肯定,你的文件实际上并不是UTF-8,因此试图将它们看作是UTF-8就是失败了。特别是,您声称使用codecs.open("Axel_List.csv", "r", "utf-8")
然后阅读该文件会出现此错误:
'utf' codec can't byte 0xe4 in position 0
所以,显然,要么它不是真正的UTF-8,要么它已经被破坏了。
通常情况下,如果没有实际拥有该文件,很难猜测文件的编码。但在这种情况下,这很容易。
在Latin-1(ISO-8859-1)中,字节0xe4为ä
。 ä
是您的代码正在寻找的第一个字符。所以,你的文件可能是Latin-1。
在斯堪的纳维亚,拉丁语-4和拉丁语6(ISO-8859-4和-10)中有时使用的其他两种遗留编码中,同样的字节也是ä
,因此您的文件可以是其中之一。
在UTF-8中,0xe4是CJK字符的前导字节。除非您怀疑自己确实有一个损坏的日文文本文件而不是有效的瑞典文本文件,否则您的文件肯定不是UTF-8。