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

时间:2017-07-21 13:32:32

标签: python

我有一些代码用于解密字符串,该字符串最初是加密的,来自.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值
  2. 的末尾剥离非ascii字符
  3. 能够将其存储到包含正确字符串/文本值的变量中
  4. 任何帮助或建议表示赞赏?感谢

1 个答案:

答案 0 :(得分:2)

python 2 中,您可以使用str.decode,如下所示:

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

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

python 3 中,您需要在解码前首先对其进行重新编码,因为默认情况下所有str个对象都会被解码为您的语言环境:

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