删除 utf-16 (Python) 上的非 ASCII 字符



我有一些代码用于解密字符串,该字符串最初是加密的并且来自.NET源代码,但我能够使其正常工作。 然而,进入 Python 的字符串中有一些额外的字符,它必须解码为 UTF-16

以下是解密部分的一些代码。 我加密的原始字符串是"Test2",这是我下面代码中的文本变量中的内容。

import Crypto.Cipher.AES
import base64, sys
password = base64.b64decode('PSCIQGfoZidjEuWtJAdn1JGYzKDonk9YblI0uv96O8s=') 
salt = base64.b64decode('ehjtnMiGhNhoxRuUzfBOXw==') 
aes = Crypto.Cipher.AES.new(password, Crypto.Cipher.AES.MODE_CBC, salt)
text = base64.b64decode('TzQaUOYQYM/Nq9f/pY6yaw==')
print(aes.decrypt(text).decode('utf-16'))
text1 = aes.decrypt(text).decode('utf-16')
print(text1)

我的问题是当我解密并打印文本结果时,它是"test2УѪ"而不是预期的"test2">

如果我将相同的解密值保存到变量中,它会被错误地解码为"틊첃陋ភ滑毾穬ヸ">

我的目标是我需要找到一种方法来:

  1. 从 test2 值末尾去除非 ASCII 字符
  2. 能够将其存储到保存正确字符串/文本值的变量中

任何帮助或建议表示感谢?谢谢

在python2中,你可以使用str.decode,像这样:

string.decode('ascii', 'ignore')

区域设置是asciiignore指定删除任何无法转换的内容。

python 3中,您需要先重新编码它,然后再解码,因为默认情况下,所有str对象都解码为您的语言环境:

string.encode('ascii', 'ignore').decode()

最新更新