我有一个要求,我应该将其存储在数据库的用户名中。这些名称的常规格式为本地\用户名。我偶然发现的用户名之一是local \ uat10215。我收到以下错误。
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 5-6: truncated \uXXXX escape
尽管我了解这个问题,但以前从未遇到过,并且我不知道有什么解决方案。
编辑:
这是我正在研究的Django项目的一部分。它带有User
自己的模型,并将用户名作为字段之一。我有用于验证目的的用户名/密码组合。我们还具有基于SAML的身份验证,其中IdP中是第三方。现在,此IdP的用户名已存储在其一边,我们仅使用User模型在我们的应用程序中保留对其的引用。因此,实际上,用户名字段的值不受我的控制,值是任何东西。我昨天偶然发现的一个用户名值为local\uat10215
。我尝试使用此值更新一个用户的用户名,以便通过外壳进行测试,但出现了以上错误。如果我使用r'local\uat10215'
,则存储在db中的值为local\\uat10215
,它将与local\uat10215
不匹配。至于可重现的代码,只需在ipython
更多:
我只是写了这个函数,
def bs_test():
try:
username = r'local\uat10125'
print(username)
except Exception as e:
print('Exception')
下面是输出。
基于此,我认为正是iPython的行为使我偏离了轨道。
我尝试的另一件事是将这样的值实际上从iPython存储到数据库(Postgres)中。我将附加屏幕截图以演示与输出一起执行的操作。
答案 0 :(得分:1)
问题是由'\u'
引起的,它被检测为unicodeescape
。
为了解决这个问题,有两种选择:
将所有反斜杠加倍(即local\\uat10215
)
使用原始字符串(即r'local\uat10215'
)
答案 1 :(得分:0)
您应该至少提供一个示例,以生成错误的代码行。
但是我想您应该尝试像这样r'local\uat10215'
另一种解决方案可能是两次转义,例如local\\uat10215
,具体取决于您的代码