在this question之后,我想知道下面的函数是否足够好用于检查没有意外序列反斜杠 - 字符已在路径中输入导致生成“特殊字符”。为了更清楚,\b
是一个退格,\
后跟一个数字会产生一些ascii字符代码。我想避免这种情况。还有像\d
这样的序列没有特殊含义,显然在这种情况下\
会自动转义。我并不担心。这是我的功能:
def checkPathString(dir):
slash = False
for c in repr(dir):
if c == '\\':
slash = not slash
else:
if slash:
raise ValueError('Path contains unescaped \\ characters')
似乎正确检测到\b
或\
后跟一个数字(因为内部表示变为\x
某事)。它还让我发现\f
是一个特殊的序列,也被翻译成\x
某些。
检测为坏字符串:
"C:\dummy\bar" #Because of "\b"
"C:\dummy\2000" #Because of "\" followed by a number
检测为良好的字符串:
"C:\dummy\\bar" #\d is escaped automatically because is not a special sequence
"C:\dummy\\2000"
答案 0 :(得分:1)
您无法实现目标,例如,您无法防范定义ASCII字符的\x
前缀,因为它们在输入时会被解释。
>>> "\x61"
'a'
>>> repr("\x61")
"'a'"
所以例如任何检测方法都会失败,给定一个名为x61abcde的子文件夹,以防输入字符串为“C:\ dummy \ x61abcde”
此外,对于\
后跟数字的几种组合,检测将失败,例如你有这些直接的解释:\61
=> 1
或\72
=> :
作为旁注,关于你提出的方法,我只会检查任何字符是否在interval [32 .. 127](或[32 .. 255]如果你想支持重音)
def check_path_string(path):
if all(31<ord(c)<127 for c in path):
pass
else:
raise ValueError("path contains non-ascii characters")