# Buggy code
def _sendRegistration(self, host=None, password=None):
    opts = {}

    if host is None:
        hostParts = app.GROWL_HOST.split(":")
    else:
        hostParts = host.split(":")

    if len(hostParts) != 2 or hostParts[1] == "":
        port = 23053
    else:
        port = int(hostParts[1])

    opts["host"] = hostParts[0]
    opts["port"] = port

    if password is None:
        opts["password"] = app.GROWL_PASSWORD
    else:
        opts["password"] = password

    opts["app"] = "Medusa"
    opts["debug"] = False

    # Send Registration
    register = gntp.core.GNTPRegister()
    register.add_header("Application-Name", opts["app"])
    register.add_header("Application-Icon", app.LOGO_URL)

    register.add_notification("Test", True)
    register.add_notification(common.notifyStrings[common.NOTIFY_SNATCH], True)
    register.add_notification(common.notifyStrings[common.NOTIFY_DOWNLOAD], True)
    register.add_notification(common.notifyStrings[common.NOTIFY_GIT_UPDATE], True)

    if opts["password"]:
        register.set_password(opts["password"])

    try:
        return self._send(opts["host"], opts["port"], register.encode(), opts["debug"])
    except Exception as error:
        log.warning(
            "GROWL: Unable to send growl to {host}:{port} - {msg!r}",
            {"msg": ex(error), "host": opts["host"], "port": opts["port"]},
        )
        return False


# Traceback (UnicodeEncodeError)
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>

# Fixed code
def _sendRegistration(self, host=None, password=None):
    opts = {}

    if host is None:
        hostParts = app.GROWL_HOST.split(":")
    else:
        hostParts = host.split(":")

    if len(hostParts) != 2 or hostParts[1] == "":
        port = 23053
    else:
        port = int(hostParts[1])

    opts["host"] = hostParts[0]
    opts["port"] = port

    if password is None:
        opts["password"] = app.GROWL_PASSWORD
    else:
        opts["password"] = password

    opts["app"] = "Medusa"
    opts["debug"] = False

    # Send Registration
    register = gntp.core.GNTPRegister()
    register.add_header("Application-Name", opts["app"])
    register.add_header("Application-Icon", app.LOGO_URL)

    register.add_notification("Test", True)
    register.add_notification(common.notifyStrings[common.NOTIFY_SNATCH], True)
    register.add_notification(common.notifyStrings[common.NOTIFY_DOWNLOAD], True)
    register.add_notification(common.notifyStrings[common.NOTIFY_GIT_UPDATE], True)

    if opts["password"]:
        register.set_password(opts["password"])

    try:
        return self._send(
            opts["host"], opts["port"], register.encode("utf-8"), opts["debug"]
        )
    except Exception as error:
        log.warning(
            "GROWL: Unable to send growl to {host}:{port} - {msg!r}",
            {"msg": ex(error), "host": opts["host"], "port": opts["port"]},
        )
        return False