【问题标题】:Trying to use output.write with UTF-8 str and get's an error (python 3.x)尝试将 output.write 与 UTF-8 str 一起使用并得到错误(python 3.x)
【发布时间】:2012-12-22 20:04:41
【问题描述】:

我正在使用以下代码打印(到文件)UTF-8 str:

output.write(currentWord.m_wordHeb)

也试过了:

output.write(currentWord.m_wordHeb.encode('utf-8')

还添加了:

import sys
import codecs

sys.stdout = codecs.getwriter('utf8')(sys.stdout)

不断出现错误... 通常是这个:

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

谢谢!

【问题讨论】:

  • currentWord.m_wordHeb的类型和值是什么?请显示print(type(currentWord.m_wordHeb))print(currentWord.m_wordHeb)的输出
  • 我得到以下两个打印行的错误:'TypeError: must be str, not bytes' 我使用几种方法构建字符串,返回类似:u'א'(这是希伯来字符) 并构建为:'string += method()' 所以我不明白为什么它是字节而不是 str。
  • 我非常怀疑print(type(...bla...)) 是否会给您错误消息TypeError: must be str, not bytes,除非您做了一些非常讨厌的事情,例如更改print 的定义。但是,如果您可以展示一段完整的、独立的、可运行的并给出此错误的代码,我很想看看它。因为当我运行您的代码时(在猜测缺少的部分之后)我确实不会得到那个错误。
  • 好吧,这就是错误,每当我在解决的文件的打开命令中添加“wb”时,但字符错误(不是希伯来文文本,而是垃圾)
  • 请注意,“sys.stdout = codecs.getwriter('utf8')(sys.stdout)”行应替换为“sys.stdout = codecs.getwriter('utf8')(sys .stdout.detach())" 与 python 3.x 一起工作。见stackoverflow.com/a/4374457/1825043

标签: python string utf-8 output


【解决方案1】:

在 python 3 中你只能编码一个字符串。如果您当前有字节,那是因为您的方法正在返回它们。例如,如果您从文件中读取字节,则应尽快将它们解码为字符串。只有这样,您才能将它们编码为 utf-8。

【讨论】:

  • 我怎样才能将希伯来字符返回为字符串而不是字节?
  • @SagiLow 在我的 python3 解释器中,如果我输入 'א',它实际上会返回一个字符串。如果你有字节(如果你以二进制形式读取文件,你会这样做),你只需要执行 bytes.decode('utf-8') (或者你使用的任何编码)
  • 我认为这与我读取文件的方式无关,因为我正在尝试打印一个由我上面提到的方法创建的简单字符串变量。
  • @SagiLow 在 python3 shell 上做一个简单的'א'.encode('utf-8') 失败了?
  • 字符串构建得很好,问题出在“Writer”上。如果我使用 'print(currentWord.m_wordHeb)' 效果很好,但如果我使用 outputFile.write((currentWord.m_wordHeb)) 我会收到错误!
【解决方案2】:

问题已解决,我为写入而打开的文件没有像 utf-8 那样打开。 因此,当我将“打开命令”更改为以下内容时:

codecs.open("C:\\NLP\\output.txt", "w", "utf-8" )

一切似乎都解决了。

谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 2020-07-26
    相关资源
    最近更新 更多