繁体   English   中英

Python编码\\解码,用于写入文本文件

[英]Python Encoding\Decoding for writing to a text file

老实说,我已经花了很多时间,而且它正在慢慢杀死我。 我已经从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)

它现在正在运行,我非常感谢您的所有帮助!!

我的猜测是您打开的输出文件已使用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)

如果已经使用正确的编解码器打开了outputFile,则另一个选择是直接写入文件而不对Unicode字符串进行编码,例如

f = codecs.open('del.text', 'wb',encoding='utf-8')
f.write(u)

您的错误消息似乎与您的任何Python语法都不相关,但实际上您正在尝试解码在UTF-8中没有等效值的十六进制值。

十六进制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个条目中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM