Python3 将用户输入字符串解释为原始字节(例如 \x41 == "A")
Python3 interpret user input string as raw bytes (e.g. \x41 == "A")
我想使用 input()
函数从命令行接受用户输入,我希望用户提供像 \x41\x42\x43
这样的输入来输入“ABC”。用户必须以字节格式输入,他们不能提供等效的字母数字。
我的问题是,当我接收用户输入然后将其打印出来时,我看到 python 试图用另一个反斜杠转义反斜杠,所以它无法将其解释为它在 ASCII 中表示的字节。
来自 Python3 命令提示符的示例代码:
1 | >>> var_abc = "\x41\x42\x43"
2 | >>> print(var_abc)
3 | ABC
4 | >>> print(bytes(var_abc, encoding='ascii'))
5 | b'ABC'
6 | >>> user_input_abc = input('enter user input in bytes: ')
7 | enter user input in bytes: \x41\x42\x43
8 | >>> print(user_input_abc)
9 | \x41\x42\x43
10| >>> print(bytes(user_input_abc, encoding='ascii'))
11| b'\x41\x42\x43'
- 我希望第 11 行的输出与第 5 行的输出相同。我需要做什么才能使 python 将我的用户输入解释为原始字节,而不是转义前面的每个反斜杠?
将用户输入的字符串解释为原始字节。您可以对字符串进行编码,然后使用 "unicode_escape" encoding 解码这些字节,然后再次对该字符串进行编码以获取字节对象
user_input_abc = '\x41\x42\x43'
print(user_input_abc) # \x41\x42\x43
user_input_escaped = user_input_abc.encode().decode('unicode_escape')
print(user_input_escaped) # 'ABC'
user_input_bytes = user_input_escaped.encode()
print(user_input_bytes) # b'ABC'
我想使用
input()
函数从命令行接受用户输入,我希望用户提供像\x41\x42\x43
这样的输入来输入“ABC”。用户必须以字节格式输入,他们不能提供等效的字母数字。我的问题是,当我接收用户输入然后将其打印出来时,我看到 python 试图用另一个反斜杠转义反斜杠,所以它无法将其解释为它在 ASCII 中表示的字节。
来自 Python3 命令提示符的示例代码:
1 | >>> var_abc = "\x41\x42\x43"
2 | >>> print(var_abc)
3 | ABC
4 | >>> print(bytes(var_abc, encoding='ascii'))
5 | b'ABC'
6 | >>> user_input_abc = input('enter user input in bytes: ')
7 | enter user input in bytes: \x41\x42\x43
8 | >>> print(user_input_abc)
9 | \x41\x42\x43
10| >>> print(bytes(user_input_abc, encoding='ascii'))
11| b'\x41\x42\x43'
- 我希望第 11 行的输出与第 5 行的输出相同。我需要做什么才能使 python 将我的用户输入解释为原始字节,而不是转义前面的每个反斜杠?
将用户输入的字符串解释为原始字节。您可以对字符串进行编码,然后使用 "unicode_escape" encoding 解码这些字节,然后再次对该字符串进行编码以获取字节对象
user_input_abc = '\x41\x42\x43'
print(user_input_abc) # \x41\x42\x43
user_input_escaped = user_input_abc.encode().decode('unicode_escape')
print(user_input_escaped) # 'ABC'
user_input_bytes = user_input_escaped.encode()
print(user_input_bytes) # b'ABC'