将 python 中的用户输入的 utf-8 编码转换为字符串
Converting utf-8 encoded to string from user input in python
a = '\xe6\xb8\xac\xe8\xa9\xa6'
print(bytes(a, 'latin-1').decode('utf-8'))
a = input("input:")
print(bytes(a, 'latin-1').decode('utf-8'))
第一个能正确打印出结果
而第二个只会打印出我输入的字符串
输出:
測試
input:\xe6\xb8\xac\xe8\xa9\xa6
\xe6\xb8\xac\xe8\xa9\xa6
Process finished with exit code 0
转换有点棘手:
# Use r'', simulate input
a = r'\xe6\xb8\xac\xe8\xa9\xa6'
print(a.encode('ascii').decode('unicode-escape').encode('latin-1').decode('utf-8'))
跟随变换:
# Step 0 (initial)
print(a)
\xe6\xb8\xac\xe8\xa9\xa6
# Step 1
print(a.encode('ascii'))
b'\xe6\xb8\xac\xe8\xa9\xa6'
# Step 2
print(a.encode('ascii').decode('unicode-escape'))
測試
# Step 3
print(a.encode('ascii').decode('unicode-escape').encode('latin-1'))
b'\xe6\xb8\xac\xe8\xa9\xa6'
# Step 4 (final)
print(a.encode('ascii').decode('unicode-escape').encode('latin-1').decode('utf-8'))
測試
或者,使用这种更简单的方法(至少在您不担心安全风险的情况下):
unicode_input = eval('"' + input() + '"')
切记:使用 eval 存在高安全风险
或按照@MisterMiyagi 的建议:
import ast
unicode_input = ast.literal_eval('"' + input() + '"')
a = '\xe6\xb8\xac\xe8\xa9\xa6'
print(bytes(a, 'latin-1').decode('utf-8'))
a = input("input:")
print(bytes(a, 'latin-1').decode('utf-8'))
第一个能正确打印出结果
而第二个只会打印出我输入的字符串
输出:
測試
input:\xe6\xb8\xac\xe8\xa9\xa6
\xe6\xb8\xac\xe8\xa9\xa6
Process finished with exit code 0
转换有点棘手:
# Use r'', simulate input
a = r'\xe6\xb8\xac\xe8\xa9\xa6'
print(a.encode('ascii').decode('unicode-escape').encode('latin-1').decode('utf-8'))
跟随变换:
# Step 0 (initial)
print(a)
\xe6\xb8\xac\xe8\xa9\xa6
# Step 1
print(a.encode('ascii'))
b'\xe6\xb8\xac\xe8\xa9\xa6'
# Step 2
print(a.encode('ascii').decode('unicode-escape'))
測試
# Step 3
print(a.encode('ascii').decode('unicode-escape').encode('latin-1'))
b'\xe6\xb8\xac\xe8\xa9\xa6'
# Step 4 (final)
print(a.encode('ascii').decode('unicode-escape').encode('latin-1').decode('utf-8'))
測試
或者,使用这种更简单的方法(至少在您不担心安全风险的情况下):
unicode_input = eval('"' + input() + '"')
切记:使用 eval 存在高安全风险
或按照@MisterMiyagi 的建议:
import ast
unicode_input = ast.literal_eval('"' + input() + '"')