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

标签 python unicode

老实说,我已经在这上面花了很多时间,它正在慢慢地折磨着我。我已经从 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 注意到我是双重编码时,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)

其他选项是直接写入文件而不对 unicode 字符串进行编码,如果 outputFile 已使用正确的编解码器打开,例如

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

关于用于写入文本文件的 Python 编码\解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9896508/

相关文章:

python - 当我在 Python 中打印 utf-8 文件中的文本时,为什么看不到希伯来字符?

python - 如何在 sympy 中使用常量 LETTER?

java - 无法测试将字符串转换为 Unicode

python - Unicode 字符串适用于 python2,但不适用于 python3

python - 宽东亚字符与格式功能的对齐

python - 如何根据python中的位置获取十六进制数的位值

python - 将 Django 与包含多个表的遗留数据库一起使用

python - 如何在 Google App Engine for Python 上设置 ETAGS?

java - Normalizer.normalize(s, Normalizer.Form.NFD) 和 StringUtils.stripAccents(s) 之间的实际区别是什么?

python - 如何创建具有可变数字的 unicode 字符?