[python] 파이썬에서 int를 ASCII로 변환하고 다시 변환하십시오.

내 사이트의 URL 단축기를 만드는 중이고 현재 계획 (제안 할 수 있음)은 단축 된 URL을 생성하기 위해 노드 ID를 사용하는 것입니다. 따라서 이론적으로 노드 26은 short.com/z노드 1 일 수 short.com/a있고 노드 52는 short.com/Z노드 104가 될 수 있습니다 short.com/ZZ. 사용자가 해당 URL로 이동하면 프로세스를 취소해야합니다 (분명히).

나는 이것에 대해 갈만한 몇 가지 방법을 생각할 수 있지만 더 좋은 방법이 있다고 생각합니다. 어떤 제안?



답변

ASCII에서 int로 :

ord('a')

준다 97

그리고 다시 문자열로 :

  • Python2에서 : str(unichr(97))
  • Python3에서 : chr(97)

준다 'a'


답변

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


답변

여러 문자가 단일 정수 / 길이 안에 묶인 경우 내 문제는 다음과 같습니다.

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


답변

URL을 인코딩하는 BASE58은 어떻습니까? 예를 들어 플리커는 그렇습니다.

# 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

다시 숫자로 바꾸는 것도 큰 문제가 아닙니다.


답변

hex(id)[2:]및을 사용하십시오 int(urlpart, 16). 다른 옵션이 있습니다. 귀하의 ID를 base32로 인코딩해도 작동 할 수는 있지만 파이썬에 base32 인코딩을 수행하는 라이브러리가 있다는 것을 모르겠습니다.

분명히 base32 인코더는 base64 모듈 과 함께 Python 2.4에 도입되었습니다 . b32encode및을 사용해보십시오 b32decode. 사람들이 단축 URL을 작성하는 경우를 대비 True하여 casefoldmap01옵션을 모두 제공해야 b32decode합니다.

사실, 나는 그것을 다시 가져갑니다. 나는 여전히 base32 인코딩이 좋은 생각이라고 생각하지만 그 모듈은 URL 단축의 경우에는 유용하지 않습니다. 모듈에서 구현을 살펴보고이 특정 사례에 대해 직접 만들 수 있습니다. 🙂


답변