将\ u转义为字符串

时间:2019-09-18 12:49:57

标签: python

我有一个要求,我应该将其存储在数据库的用户名中。这些名称的常规格式为本地\用户名。我偶然发现的用户名之一是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

中进行尝试

enter image description here

更多:

我只是写了这个函数,

def bs_test():

    try:
        username = r'local\uat10125'
        print(username)
    except Exception as e:
        print('Exception')

下面是输出。

enter image description here

基于此,我认为正是iPython的行为使我偏离了轨道。

我尝试的另一件事是将这样的值实际上从iPython存储到数据库(Postgres)中。我将附加屏幕截图以演示与输出一起执行的操作。

enter image description here

2 个答案:

答案 0 :(得分:1)

问题是由'\u'引起的,它被检测为unicodeescape
为了解决这个问题,有两种选择:

  1. 将所有反斜杠加倍(即local\\uat10215

  2. 使用原始字符串(即r'local\uat10215'

答案 1 :(得分:0)

您应该至少提供一个示例,以生成错误的代码行。

但是我想您应该尝试像这样r'local\uat10215'

单引号

另一种解决方案可能是两次转义,例如local\\uat10215,具体取决于您的代码