【问题标题】:Python special characters in Strings字符串中的 Python 特殊字符
【发布时间】:2011-09-18 08:22:41
【问题描述】:

我正在尝试在网页中显示电子邮件。该程序是用 Python 编写的。不幸的是,我有一些字符编码问题。我在文本中有引号和双引号。

原始邮件:

“All is good”
‘it is getting better’

我从 ISP 获得的字符集为“windows-1252”:

=93All is good=94
=91it is getting better=92

我从 ISP 获得的字符集为 'utf-8':

=E2=80=9CAll is good=E2=80=9D
=E2=80=98it is getting better=E2=80=99

我将=.. 替换为对应的十六进制字符。然后文本看起来像:

character set 'windows-1252'
ôAll is goodö
æit is getting betterÆ


character set 'utf-8'
ΓÇ£All is goodΓÇ¥
ΓÇÿit is getting betterΓÇÖ

对 unicode 函数的后续调用失败

UnicodeEncodeError: 'charmap' codec can't encode character u'\u201d' in position 6: 
character maps to <undefined>

或类似的。

电话看起来像unicode( message, 'utf-8', 'replace' )。 知道我做错了什么吗?

【问题讨论】:

  • 下次请适当格式化您的代码,也请看看我在编辑您的代码时是否有任何错误。谢谢!

标签: python email encoding character


【解决方案1】:

你为什么要用任何东西替换任何东西?

>>> m = email.message_from_string('''Content-Type: text/plain; utf-8\nContent-Transfer-Encoding: quoted-printable\n\n=E2=80=9CAll is good=E2=80=9D\n=E2=80=98it is getting better=E2=80=99''')
>>> m.get_payload(decode=True).decode(m['Content-Type'].split('; ')[1])u'\u201cAll is good\u201d\n\u2018it is getting better\u2019'

【讨论】:

    【解决方案2】:

    因为我尝试过这个并且遇到了问题。这是另一个尝试:

    输出如下:

    # lines is already prefilled with a valid HTML message
    m = email.message_from_string( lines );
    email.iterators._structure( m );
    print m.is_multipart();
    print m.get_payload( decode=True );
    print m.get_payload();
    

    输出如下:

    >>> execfile('email2.py')
    多部分/替代
    文本/纯文本
    文本/html
    真的

    []

    你看,如果我使用 decode='true' 会失败。这是简化的电子邮件:

    Content-Type: multipart/alternative;
        boundary="----=_NextPart_000_0130_01CC1E30.41026040"
    
    This is a multi-part message in MIME format.
    
    ------=_NextPart_000_0130_01CC1E30.41026040
    Content-Type: text/plain;
        charset="utf-8"
    Content-Transfer-Encoding: quoted-printable
    
    plain
    
    ------=_NextPart_000_0130_01CC1E30.41026040
    Content-Type: text/html;
        charset="utf-8"
    Content-Transfer-Encoding: quoted-printable
    
    html
    
    ------=_NextPart_000_0130_01CC1E30.41026040--
    

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 2022-01-22
      • 2011-05-11
      • 1970-01-01
      • 2022-11-13
      • 2021-04-22
      • 2021-03-03
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多