diff --git a/bulkredditdownloader/file_name_formatter.py b/bulkredditdownloader/file_name_formatter.py index aac4b48..fcd5851 100644 --- a/bulkredditdownloader/file_name_formatter.py +++ b/bulkredditdownloader/file_name_formatter.py @@ -43,7 +43,9 @@ class FileNameFormatter: result = format_string for key in attributes.keys(): if re.search(fr'(?i).*{{{key}}}.*', result): - result = re.sub(fr'(?i){{{key}}}', str(attributes.get(key, 'unknown')), result) + key_value = attributes.get(key, 'unknown') + key_value = bytes(key_value, 'utf-8').decode('unicode-escape') + result = re.sub(fr'(?i){{{key}}}', key_value, result,) logger.log(9, f'Found key string {key} in name') result = result.replace('/', '') diff --git a/bulkredditdownloader/tests/test_file_name_formatter.py b/bulkredditdownloader/tests/test_file_name_formatter.py index bf8cee1..a3506e2 100644 --- a/bulkredditdownloader/tests/test_file_name_formatter.py +++ b/bulkredditdownloader/tests/test_file_name_formatter.py @@ -294,3 +294,14 @@ def test_multilevel_folder_scheme( result = result.relative_to(tmp_path) assert str(result.parent) == expected assert len(result.parents) == (len(expected.split('/')) + 1) + + +@pytest.mark.online +@pytest.mark.reddit +@pytest.mark.parametrize(('test_submission_id', 'test_file_scheme', 'expected'), ( + ('mecwk7', '{TITLE}', 'My cat’s paws are so cute'), # Unicode escape in title +)) +def test_edge_case_names(test_submission_id: str, test_file_scheme: str, expected: str, reddit_instance: praw.Reddit): + test_submission = reddit_instance.submission(id=test_submission_id) + result = FileNameFormatter._format_name(test_submission, test_file_scheme) + assert result == expected