diff --git a/xactfetch.py b/xactfetch.py index a1f109c..0ed529c 100644 --- a/xactfetch.py +++ b/xactfetch.py @@ -1,3 +1,4 @@ +import base64 import copy import datetime import json @@ -51,7 +52,13 @@ def ntfy( if filename: headers['Filename'] = filename if message: - headers['Message'] = message.replace('\n', '\\n') + try: + message.encode("ascii") + except UnicodeEncodeError: + message = rfc2047_base64encode(message) + else: + message = message.replace('\n', '\\n') + headers['Message'] = message r = requests.put( url, headers=headers, @@ -117,6 +124,13 @@ def rbw_code( return p.stdout.rstrip('\n') +def rfc2047_base64encode( + message: str, +) -> str: + encoded = base64.b64encode(message.encode("utf-8")).decode("ascii") + return f"=?UTF-8?B?{encoded}?=" + + def firefly_import(csv: Path, config: dict[str, Any], token: str) -> None: log.debug('Importing transactions from %s to Firefly III', csv) env = {