我老老实实地花了很多时间在这上面,而且它正在慢慢地杀了我。我从PDF中删除了内容并将其存储在一个数组中。现在我试图将它从数组中拉回来并将其写入txt文件。但是,由于编码问题,我似乎无法实现它。
allTheNTMs.append(contentRaw[s1:].encode("utf-8"))
for a in range(len(allTheNTMs)):
kmlDescription = allTheNTMs[a]
print kmlDescription #this prints out fine
outputFile.write(kmlDescription)
我得到的错误是“unicodedecodeerror:ascii编解码器无法解码位置213中的字节0xc2:序号不在范围内(128)。
我现在只是乱搞,但我已经尝试了各种方法让这些东西写出来。
outputFile.write(kmlDescription).decode('utf-8')
如果这是基本的,请原谅我,我还在学习Python(2.7)。
干杯!
EDIT1:示例数据类似于以下内容:
Chart 3686 (plan, Morehead City) [ previous update 4997/11 ] NAD83 DATUM
Insert the accompanying block, showing amendments to coastline,
depths and dolphins, centred on: 34° 41´·19N., 76° 40´·43W.
Delete R 34° 43´·16N., 76° 41´·64W.
当我添加打印类型(原始)时,我得到了
编辑2:当我只是尝试写入数据时,我收到原始错误消息(ascii编解码器无法解码字节...)
我将查看建议的主题和视频。谢谢大家!
编辑3:我正在使用Python 2.7
编辑4:当他注意到我是双重编码时,agf在下面的评论中击中了头部。我试图故意对以前一直在工作的字符串进行双重编码,并产生与最初抛出的相同的错误消息。类似的东西:
text = "Here's a string, but imagine it has some weird symbols and whatnot in it - apparently latin-1"
textEncoded = text.encode('utf-8')
textEncodedX2 = textEncoded.encode('utf-8')
outputfile.write(textEncoded) #Works!
outputfile.write(textEncodedX2) #failed
一旦我发现我试图进行双重编码,解决方案如下:
allTheNTMs.append(contentRaw[s1:].encode("utf-8"))
for a in range(len(allTheNTMs)):
kmlDescription = allTheNTMs[a]
kmlDescriptionDecode = kmlDescription.decode("latin-1")
outputFile.write(kmlDescriptionDecode)
现在正在工作,我非常感谢你的帮助!!
答案 0 :(得分:4)
我的猜测是您打开的输出文件已使用latin1
甚至utf-8
编解码器打开,因此您无法将utf-8
编码数据写入,因为它会尝试重新转换它,如果是正常打开的文件,你可以写任何数据字符串,这是一个重新创建类似错误的例子
u = u'सच्चिदानन्द हीरानन्द वात्स्यायन '
s = u.encode('utf-8')
f = codecs.open('del.text', 'wb',encoding='latin1')
f.write(s)
输出:
Traceback (most recent call last):
File "/usr/lib/wingide4.1/src/debug/tserver/_sandbox.py", line 1, in <module>
# Used internally for debug sandbox under external interpreter
File "/usr/lib/python2.7/codecs.py", line 691, in write
return self.writer.write(data)
File "/usr/lib/python2.7/codecs.py", line 351, in write
data, consumed = self.encode(object, self.errors)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe0 in position 0: ordinal not in range(128)
<强>解决方案强>:
如果你没有设置任何编解码器
,这将有效f = open('del.txt', 'wb')
f.write(s)
其他选项是直接写入文件而不编码unicode字符串,如果outputFile已使用正确的编解码器打开,例如
f = codecs.open('del.text', 'wb',encoding='utf-8')
f.write(u)
答案 1 :(得分:1)
您的错误消息似乎与您的任何Python语法无关,但实际上您正在尝试解码在UTF-8中没有等效的Hex值。
HEX 0xc2似乎代表一个拉丁字符 - 顶部有一个重音的大写字母A.因此,不要使用“allTheNTMs.append(contentRaw [s1:]。encode(”utf-8“))”,而是尝试: -
allTheNTMs.append(contentRaw[s1:].encode("latin-1"))
我不是Python的专家,所以这可能不起作用,但看起来你正试图编码一个拉丁字符。鉴于您收到的错误消息,似乎在尝试使用UTF-8编码时,Python只会查看前128个条目,因为您的错误似乎表明条目“0Xc2”超出范围,实际上它是在UTF-8的前128个条目中。