Closed amorphobia closed 5 months ago
@amorphobia 是的,目前一些特性的符号还存在一些BUG,除了半角冒号还有/
也会导致出现问题。
第一种解决办法是在标题中不使用这些特殊的符号。
第二种解决办法是通过config.json
配置urlMode
为issue
想要着手来改这个bug 我在这个链接找到了一个函数可以解决命名问题:
def is_valid_folder_name(name: str):
# Define a regular expression pattern to match forbidden characters
ILLEGAL_NTFS_CHARS = r'[<>:/\\|?*\"]|[\0-\31]'
# Define a list of forbidden names
FORBIDDEN_NAMES = ['CON', 'PRN', 'AUX', 'NUL',
'COM1', 'COM2', 'COM3', 'COM4', 'COM5',
'COM6', 'COM7', 'COM8', 'COM9',
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5',
'LPT6', 'LPT7', 'LPT8', 'LPT9']
# Check for forbidden characters
match = re.search(ILLEGAL_NTFS_CHARS, name)
if match:
raise ValueError(
f"Invalid character {match[0]} for filename {name}")
# Check for forbidden names
if name.upper() in FORBIDDEN_NAMES:
raise ValueError(f"{name} is a reserved folder name in windows")
# Check for empty name (disallowed in Windows)
if name.strip() == "":
raise ValueError("Empty file name not allowed in Windows")
# Check for names starting or ending with dot or space
match = re.match(r'^[. ]|.*[. ]$', name)
if match:
raise ValueError(
f"Invalid start or end character ({match[0]})"
f" in folder name {name}"
)
从issue中直接导出的md文件名称也可能存在不合法的符号,所以那边的文件名应该也要修改。目前想法是把所有的非法字符改成-
。
edit: 我想复杂了,只要这样做就可以:
def clean_invalid_chars(name:str):
cleaned_name=name
ILLEGAL_NTFS_CHARS = r'[<>:/\\|?*\"]|[\0-\31]'
FORBIDDEN_NAMES = ['CON', 'PRN', 'AUX', 'NUL',
'COM1', 'COM2', 'COM3', 'COM4', 'COM5',
'COM6', 'COM7', 'COM8', 'COM9',
'LPT1', 'LPT2', 'LPT3', 'LPT4', 'LPT5',
'LPT6', 'LPT7', 'LPT8', 'LPT9']
if name.upper() in FORBIDDEN_NAMES:
cleaned_name=name+'-'
cleaned_name=re.sub(ILLEGAL_NTFS_CHARS,'-',cleaned_name)
return cleaned_name
@aldehyde-rcho 感谢,有空我会测试一下,解决这个BUG
这样生成的 html 文件名中含也有半角冒号,而 Windows 的文件系统不允许半角冒号存在