在我的用户变量中,我存储了从本地ldap获取的字节列表,并使用for循环转换为字符串列表。 我必须将此列表作为jsonify返回。 如果我不使用该编码密钥,则会得到与原始编码不同的输出,但仍会编码。 问题是我无法在任何地方访问解码方法。 有帮助吗?
users = ldap.get_group_members('ship_crew')
user_list = []
for user in users:
user_list.append((str(user, encoding='utf-8').split(",")[0].split("=")[1]))
return jsonify(user_list)
用户变量的原始列表:
[
"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com",
"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com",
"cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"
]
具有编码输出的循环:
[
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodr\u00edguez"
]
预期:
[
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodríguez"
]
答案 0 :(得分:0)
我将使用正则表达式提取您的姓名:
import re
l = [
"cn=Philip J. Fry,ou=people,dc=planetexpress,dc=com",
"cn=Turanga Leela,ou=people,dc=planetexpress,dc=com",
"cn=Bender Bending Rodr\u00edguez,ou=people,dc=planetexpress,dc=com"
]
NAME_PATTERN = re.compile(r'cn=(.*?),')
result = [NAME_PATTERN.match(s).group(1) for s in l]
print(result)
输出:
['Philip J. Fry', 'Turanga Leela', 'Bender Bending Rodríguez']
请注意,当您将其转储为JSON时,不支持í
,因为默认情况下会尝试转换为ASCII,因此会将其转储为UTF-16(Unicode 0x00ED
):
import json
print(json.dumps(result, indent=2))
输出:
[
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodr\u00edguez"
]
您可以根据需要通过设置ensure_ascii=False
来解决此问题,尽管如果您在API中使用此方法,我会小心并坚持使用Unicode编码的ASCII:
print(json.dumps(result, indent=2, ensure_ascii=False))
输出:
[
"Philip J. Fry",
"Turanga Leela",
"Bender Bending Rodríguez"
]
答案 1 :(得分:0)
您的输出是正确的JSON。 Unicode代码点00ED是í,在JSON中,任何字符都可以使用其Unicode代码点进行转义。 JSON输出中的“ \ 00ed”是写入该字符的有效方法。
使用该字符而不对其进行编码也是正确的JSON,但是显然jsonify选择对其进行编码。
然后任何合格的JSON解码器都会将其变回í。
如果使用标准库的json.dumps
,则可以使用ensure_ascii=False
来防止这种行为,但是我不知道“ jsonify”是什么。