Issue 1685453: email package should work better with unicode (original) (raw)
In Python 3.1.1, email.mime.text.MIMEText accepts an 8-bit charset, but not utf-8.
I think you should not have to specify a charset. All strings are unicode now, so I think the package should choose an appropriate charset based on the characters in the text, us-ascii, some iso-8859 charset, or utf-8, whatever fits.
Python 3.1.1 (r311:74480, Oct 2 2009, 11:50:52)
[GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
from email.mime.text import MIMEText
text = 'H\u00e9'
msg = MIMEText(text, 'plain', 'iso-8859-1')
print(msg.as_string())
Content-Type: text/plain; charset="iso-8859-1"
MIME-Version: 1.0
Content-Transfer-Encoding: quoted-printable
H=E9
msg = MIMEText(text, 'plain', 'utf-8')
Traceback (most recent call last):
File "/my/opt/Python-3/lib/python3.1/email/message.py", line 269, in set_charset
cte(self)
TypeError: 'str' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "", line 1, in
File "/my/opt/Python-3/lib/python3.1/email/mime/text.py", line 30, in init
self.set_payload(_text, _charset)
File "/my/opt/Python-3/lib/python3.1/email/message.py", line 234, in set_payload
self.set_charset(charset)
File "/my/opt/Python-3/lib/python3.1/email/message.py", line 271, in set_charset
self._payload = charset.body_encode(self._payload)
File "/my/opt/Python-3/lib/python3.1/email/charset.py", line 380, in body_encode
return email.base64mime.body_encode(string)
File "/my/opt/Python-3/lib/python3.1/email/base64mime.py", line 94, in body_encode
enc = b2a_base64(s[i:i + max_unencoded]).decode("ascii")
TypeError: must be bytes or buffer, not str
Now that we are primarily focused on Python3 development, collecting "unicode" issues is not really all that useful (at least not to me, and I'm currently doing the email maintenance), so I'm closing this. All the relevant issues are assigned to me anyway, so I'll be dealing with them by and by.