【问题标题】:Python Unicode problem: Getting google translate results into a csvPython Unicode 问题:将谷歌翻译结果转换为 csv
【发布时间】:2019-06-03 06:42:13
【问题描述】:

我正在尝试编写一个 python 程序来获取多种语言的谷歌翻译结果并将它们写入 csv 文件。大多数代码都有效,但我遇到了 unicode 问题。

当前代码:

WordTable = open('Translated.csv', 'w', newline="", encoding = 'utf-8-sig')
WordWrite = unicodecsv.writer(WordTable)
for row in WordOut:

    print(row[0])
    row = row + [Translator().translate(row[0], src = 'en', dest='es').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ar').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='zh-CN').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text]
    print(len(row), row)
    WordWrite.writerow(row)

在这里和其他地方阅读后我所尝试的:

  1. 当前代码:导致“UnicodeEncodeError: 'charmap character can't encode characters'。当根本没有使用编码命令或选项时也会发生这种情况。

  2. 将翻译行改为:

    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text.encode('utf-8-sig')]
    

或等效:代码运行,但输出较长版本的“b'\xef\xbb\”等。

如果可能的话,我还对正在发生的事情的解释感兴趣(什么格式,何时更改,如何输入等)。我在别处读到的解释可能会让人感到困惑。

编辑:这是在 Python 3.4 中

【问题讨论】:

  • 请提供您的Translated.csv的示例
  • 请澄清两件事:(1)UnicodeEncodeError 是来自print() 表达式还是来自WordWrite.writerow() 行? (2) 你使用的是 Python 2 还是 Python 3?
  • 后期添加:在尝试重新测试所有内容以给出更好的答案后,问题基本得到解决。代码如下。

标签: python csv unicode export-to-csv


【解决方案1】:

经过一些重新测试,结果证明此代码适用于 csv:

WordTable = open('Translated.csv', 'w', newline="", encoding = 'utf-8-sig')
WordWrite = csv.writer(WordTable)
for row in WordOut:

    print(row[0])
    row = row + [Translator().translate(row[0], src = 'en', dest='es').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ar').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='zh-CN').text]
    row = row + [Translator().translate(row[0], src = 'en', dest='ru').text]
    #printing length or english alphabet works, but errors on special characters
WordWrite.writerow(row)

Cmd 窗口不喜欢非英文字母,如果您使用的是这个确切的代码。额外的重新测试显示:

  1. 在 open() 函数中使用 ,encoding='utf8'),在翻译中使用 .text,打印 csv 文件中的特殊字符,但错误的字符(西班牙语可以,其他三个不行)
  2. 在 open() 函数中完全不使用编码,在翻译函数中使用 .text,会产生 UnicodeEncodeError(上面列出的那个)
  3. 在翻译文本给出之后的任何类型的编码(如,translationstuff.text.encoding('something') 给出斜线标记作为 csv 文件中的输出。示例单元格(意味着北方的俄语): b'\xd0\xba \xd1\x81\xd0\xb5\xd0\xb2\xd0\xb5\xd1\x80\xd1\x83'

我认为正在发生的事情(正在检查未来情况,我不太了解编程):Python 3 可以很好地读取文本。如果我尝试对文本进行编码,Python 认为它是常规文本(这部分令人困惑)并将其发送到 csv 以给出上面写的斜杠序列。 csv 通常不会使用非英文字符进行操作,因此如果我不专门以不同的格式编写它会引发错误(并且格式显然必须是正确的,否则字符是错误的)

【讨论】:

  • 在 Python 3 中,csv 模块可以很好地处理任何语言的文本。如果输出文件使用 UTF-8 编码,则所有字符都应正确写入(除非输入有问题)。如果您在输出文件中看到错误的字符,则可能是查看者对文件编码有错误的想法(即使用 UTF-8 以外的其他内容进行显示)。
猜你喜欢
  • 2020-10-02
  • 2019-02-23
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2020-09-25
  • 2011-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多