As you have a Kobo device, the following is run over the filename after it is constructed:
Code:
invalid_filename_chars_re = re.compile(r'[\/\\\?%\*:;\|\"\'><\$!]', re.IGNORECASE | re.UNICODE)
return [invalid_filename_chars_re.sub('_', x) for x in components]
Any character that matches that regex will be replaced. Stripping out the escape characters, and putting a space between them, the list is:
Code:
/ \ ? % * : ; | " ' > < $ !