将int转换为ASCII并返回Python

时间:2010-09-09 02:47:08

标签: python integer ascii encode

我正在为我的网站制作一个URL缩短器,我目前的计划(我愿意接受建议)是使用节点ID来生成缩短的URL。因此,理论上,节点26可以是short.com/z,节点1可以是short.com/a,节点52可以是short.com/Z,节点104可以是short.com/ZZ。当用户访问该URL时,我需要反转该过程(显然)。

我可以想到一些方法可以解决这个问题,但我猜测有更好的方法。有什么建议吗?

5 个答案:

答案 0 :(得分:202)

ASCII到int:

ord('a')

给出97

回到字符串:

    Python2中的
  • str(unichr(97))
  • Python3中的
  • str(chr(97))

给出'a'

答案 1 :(得分:80)

>>> ord("a")
97
>>> chr(97)
'a'

答案 2 :(得分:7)

如果多个字符绑定在一个整数/长整数内,那就像我的问题一样:

s = '0123456789'
nchars = len(s)
# string to int or long. Type depends on nchars
x = sum(ord(s[byte])<<8*(nchars-byte-1) for byte in range(nchars))
# int or long to string
''.join(chr((x>>8*(nchars-byte-1))&0xFF) for byte in range(nchars))

收益'0123456789'x = 227581098929683594426425L

答案 3 :(得分:6)

BASE58编码URL怎么样?比如flickr就好了。

# note the missing lowercase L and the zero etc.
BASE58 = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ' 
url = ''
while node_id >= 58:
    div, mod = divmod(node_id, 58)
    url = BASE58[mod] + url
    node_id = int(div)

return 'http://short.com/%s' % BASE58[node_id] + url

将其转回一个数字也不是什么大问题。

答案 4 :(得分:-1)

使用hex(id)[2:]int(urlpart, 16)。还有其他选择。 base32编码你的id也可以工作,但我不知道有任何库在Python中内置了base32编码。

显然在Python 2.4中使用base64 module引入了base32编码器。您可以尝试使用b32encodeb32decode。如果人们写下缩短的网址,您应该True casefold选项map01 b32decode {/ 1}}。

实际上,我接受了。我仍然认为base32编码是一个好主意,但该模块对URL缩短的情况没有用。您可以查看模块中的实现,并针对此特定情况自行创建。 : - )