Repository: pymedusa/Medusa

Issue:
Telegram notification fails with non-ASCII characters
**Describe the bug**
During post processing it was attempting to send a Telegram "downloaded" notification for:
[`Westworld - 2x03 - Virtù e Fortuna`](https://www.thetvdb.com/series/westworld/episodes/6636942).
Failed to encode the non-ASCII characters, and stopped the post-processing operation mid-way.

**Medusa:**
 - OS: Windows 7 x64
 - Branch: `develop`
 - Commit: 774143dc79568f55ae6ce97749ee0fa8ff8ac0eb

**Logs:**
The post-processing was triggered from API v1.
```
2018-07-11 00:55:37 DEBUG    TORNADO :: [7e4da69] 296762: Formatting pattern: %SN - %Sx03 - %EN - %QN -> Westworld - 2x03 - Virtù e Fortuna - 1080p WEB-DL
2018-07-11 00:55:37 DEBUG    TORNADO :: [7e4da69] Notification for NMJ scan update not enabled, skipping this notification
2018-07-11 00:55:37 DEBUG    TORNADO :: [7e4da69] Sending a Telegram message for Westworld - 2x03 - Virtù e Fortuna - 1080p WEB-DL
2018-07-11 00:55:37 DEBUG    TORNADO :: [7e4da69] Telegram in use with API KEY: **********
2018-07-11 00:55:37 ERROR    TORNADO :: [7e4da69] API :: ''
Traceback (most recent call last):
  File "C:\Medusa\medusa\server\api\v1\core.py", line 141, in get
    out_dict = _call_dispatcher(args, kwargs)
  File "C:\Medusa\medusa\server\api\v1\core.py", line 211, in call_dispatcher
    cur_out_dict = func(cur_args, cur_kwargs).run()  # call function and get response
  File "C:\Medusa\medusa\server\api\v1\core.py", line 1309, in run
    failed=self.failed, proc_type=self.type
  File "C:\Medusa\medusa\process_tv.py", line 145, in process
    ignore_subs=ignore_subs)
  File "C:\Medusa\medusa\process_tv.py", line 333, in process_files
    self.process_media(path, self.video_files, force, is_priority, ignore_subs)
  File "C:\Medusa\medusa\process_tv.py", line 554, in process_media
    self.result = processor.process()
  File "C:\Medusa\medusa\post_processor.py", line 1279, in process
    notifiers.notify_download(ep_obj._format_pattern('%SN - %Sx%0E - %EN - %QN'))
  File "C:\Medusa\medusa\notifiers\__init__.py", line 92, in notify_download
    n.notify_download(ep_name)
  File "C:\Medusa\medusa\notifiers\telegram.py", line 111, in notify_download
    self._notify_telegram(title, ep_name)
  File "C:\Medusa\medusa\notifiers\telegram.py", line 165, in _notify_telegram
    return self._send_telegram_msg(title, message, user_id, api_key)
  File "C:\Medusa\medusa\notifiers\telegram.py", line 62, in _send_telegram_msg
    message = '%s : %s' % (title.encode(), msg.encode())
  File "C:\Python27\lib\encodings\cp1255.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character u'\xf9' in position 23: character maps to <undefined>
```


Discussion:

Resolving patch:
diff --git a/medusa/notifiers/growl.py b/medusa/notifiers/growl.py
--- a/medusa/notifiers/growl.py
+++ b/medusa/notifiers/growl.py
@@ -69,7 +69,7 @@ def _send_growl(self, options, message=None):
         if message:
             notice.add_header('Notification-Text', message)
 
-        response = self._send(options['host'], options['port'], notice.encode(), options['debug'])
+        response = self._send(options['host'], options['port'], notice.encode('utf-8'), options['debug'])
         return True if isinstance(response, gntp.core.GNTPOK) else False
 
     @staticmethod
@@ -184,7 +184,7 @@ def _sendRegistration(self, host=None, password=None):
             register.set_password(opts['password'])
 
         try:
-            return self._send(opts['host'], opts['port'], register.encode(), opts['debug'])
+            return self._send(opts['host'], opts['port'], register.encode('utf-8'), opts['debug'])
         except Exception as error:
             log.warning(
                 u'GROWL: Unable to send growl to {host}:{port} - {msg!r}',
diff --git a/medusa/notifiers/telegram.py b/medusa/notifiers/telegram.py
--- a/medusa/notifiers/telegram.py
+++ b/medusa/notifiers/telegram.py
@@ -59,7 +59,7 @@ def _send_telegram_msg(self, title, msg, user_id=None, api_key=None):
 
         log.debug('Telegram in use with API KEY: {0}', api_key)
 
-        message = '%s : %s' % (title.encode(), msg.encode())
+        message = '{0} : {1}'.format(title, msg).encode('utf-8')
         payload = urlencode({'chat_id': user_id, 'text': message})
         telegram_api = 'https://api.telegram.org/bot%s/%s'
 


Test patch: