360 def headencode(ui, s, charsets=None, display=False): |
360 def headencode(ui, s, charsets=None, display=False): |
361 '''Returns RFC-2047 compliant header from given string.''' |
361 '''Returns RFC-2047 compliant header from given string.''' |
362 if not display: |
362 if not display: |
363 # split into words? |
363 # split into words? |
364 s, cs = _encode(ui, s, charsets) |
364 s, cs = _encode(ui, s, charsets) |
365 return str(email.header.Header(s, cs)) |
365 return encoding.strtolocal(email.header.Header(s, cs).encode()) |
366 return s |
366 return s |
367 |
367 |
368 |
368 |
369 def _addressencode(ui, name, addr, charsets=None): |
369 def _addressencode(ui, name, addr, charsets=None): |
370 assert isinstance(addr, bytes) |
370 assert isinstance(addr, bytes) |
371 name = headencode(ui, name, charsets) |
371 name = encoding.strfromlocal(headencode(ui, name, charsets)) |
372 try: |
372 try: |
373 acc, dom = addr.split(b'@') |
373 acc, dom = addr.split(b'@') |
374 acc.decode('ascii') |
374 acc.decode('ascii') |
375 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna') |
375 dom = dom.decode(pycompat.sysstr(encoding.encoding)).encode('idna') |
376 addr = b'%s@%s' % (acc, dom) |
376 addr = b'%s@%s' % (acc, dom) |