gpt4 book ai didi

python - 阅读带有重音的文本 - Python

转载 作者:太空狗 更新时间:2023-10-29 11:47:55 26 4
gpt4 key购买 nike

我在 python 中做了一些连接到 GMAIL 并打印电子邮件文本的脚本......但是,我的电子邮件经常包含带有“重音”的单词。还有我的问题...

例如,我得到的文本:“PLANO DE S=C3=9ADE”应该打印为“PLANO DE SAÚDE”。

如何使我的电子邮件文本清晰可辨?我可以用什么来转换这些带重音的字母?

谢谢,


Andrey 建议的代码在 Windows 上运行良好,但在 Linux 上我仍然得到错误的打印:

>>> b = 'PLANO DE S=C3=9ADE'
>>> s = b.decode('quopri').decode('utf-8')
>>> print s
PLANO DE SÃDE

拉斐尔,

谢谢,你对这个词是正确的,它被拼错了。但是这里的问题仍然相同。另一个例子:正确的词:obersevação

>>> b = 'Observa=C3=A7=C3=B5es'
>>> s = b.decode('quopri').decode('utf-8')
>>> print s
Observações

我正在使用 UTF-8 语言环境的 Debian:

>>> :~$ locale
LANG=en_US.UTF-8

安德烈,

感谢您的宝贵时间。我同意你的解释,但这里仍然有同样的问题。看看我的测试:

   s='Observa=C3=A7=C3=B5es'
s2= s.decode('quopri').decode('utf-8')

>>> print s

Observa=C3=A7=C3=B5es

>>> print s2

Observações

>>> import locale

>>> ENCODING = locale.getpreferredencoding()

>>> print s.encode(ENCODING)
Observa=C3=A7=C3=B5es

>>> print s2.encode(ENCODING)
Observações

>>> print ENCODING
UTF-8

最佳答案

这种编码称为 Quoted-printable。在您的示例中,您有一个以 UTF-8 字节编码的字符串(Python 的 unicode)(Python 的 str)以引用的可打印字节编码。所以获取字符串值的正确方法是:

>>> b = 'PLANO DE S=C3=9ADE'
>>> s = b.decode('quopri').decode('utf-8')
>>> print s
PLANO DE SÚDE

更新:虽然控制台调节可能存在一些问题。 s 包含一个完全正确的 Unicode 字符串值(Python 类型 unicode)。但是当您使用 print 语句时,值必须 转换为字节(Python 的 str)以便写入 OS 文件描述符编号1(标准输出管道)。所以 print 语句实现会检查您的控制台编码,然后进行一些猜测并打印结果。事实上,在 Python 2 中,从交互式 shell 打印、以非交互方式运行您的进程以及在将输出重定向到文件的同时运行您的进程,结果将有所不同。

在 Python 2 中输出编码字符串的最佳方式尚未达成一致。最有意义的两种方式是:

1) 使用locale 的编码猜测并手动编码字符串。

import locale
ENCODING = locale.getpreferredencoding()

print s.encode(ENCODING)

2) 使用编码选项(命令行、硬编码或其他)。

from getopt import getopt
ENCODING = 'UTF-8'
opts, args = getopt(sys.argv[1:], '', ['encoding='])
for opt, arg in opts:
if opt == '--encoding':
ENCODING = arg

print s.encode(ENCODING)

更新 2:如果没有任何帮助并且您仍然确定您的控制台编码和字体设置为 UTF-8,请尝试以下操作:

import sys, os
ENCODING = 'UTF-8'
stdout = os.fdopen(sys.stdout.fileno(), 'wb')
s = u'привет' # Don't forget to use a Unicode literal staring with u''
stdout.write(s.encode(ENCODING))

此时您必须在您的控制台中以西里尔字符集看到俄语单词 привет :)

如果是这种情况,那么您应该使用此二进制 stdout 而不是普通的 sys.stdout

关于python - 阅读带有重音的文本 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3680352/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com