好的,所以我的问题是我有一个字符串'\222\222\223\225',它在数据库中存储为拉丁文-1。我从django(通过打印)得到的是下面的字符串,“–我认为是它的utf转换。现在我需要将字符串传递到一个
此操作是否:

strdecryptedPassword + chr(ord(c) - 3 - intCounter - 30)

我得到这个错误:
chr()arg不在范围内(256)
如果我首先尝试将字符串编码为拉丁文-1,则会出现以下错误:
“Latin-1”编解码器无法对位置0-3中的字符进行编码:序号不是
范围内(256)
我已经读了很多关于字符编码工作原理的书,但有一些东西我遗漏了,因为我就是不明白!

最佳答案

您的第一个错误'chr()arg不在范围(256)'可能表示您的值不足,因为chr不能取负数我不知道当inputcounter+33大于实际字符表示时,加密算法应该做什么,在这种情况下,您必须检查该做什么。
关于第二个错误必须解码()而不是编码()常规字符串对象,才能获得数据的正确表示。encode()接受unicode对象(以u开头的对象)并生成要输出或写入文件的常规字符串。decode()接受一个字符串对象并生成一个具有相应代码点的unicode对象当从字符串对象生成unicode()调用时,也可以调用a.decode('Latin-1')。

>>> a = '\222\222\223\225'
>>> u = unicode(a,'latin-1')
>>> u
u'\x92\x92\x93\x95'
>>> print u.encode('utf-8')
ÂÂÂÂ
>>> print u.encode('utf-16')
ÿþ
>>> print u.encode('latin-1')

>>> for c in u:
...   print chr(ord(c) - 3 - 0 -30)
...
q
q
r
t
>>> for c in u:
...   print chr(ord(c) - 3 -200 -30)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
ValueError: chr() arg not in range(256)

关于python - UTF-8 latin-1转换问题,python django,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/274361/

10-08 22:38