ASCII में और पाइथन में वापस कन्वर्ट करें


137

मैं अपनी साइट के लिए एक URL शॉर्टनर बनाने पर काम कर रहा हूं, और मेरी वर्तमान योजना (मैं सुझावों के लिए खुला हूं) छोटा URL बनाने के लिए नोड आईडी का उपयोग करना है। तो, सिद्धांत में, नोड 26 हो सकता है short.com/z, नोड 1 हो सकता है short.com/a, नोड 52 हो सकता है short.com/Z, और नोड 104 हो सकता है short.com/ZZ। जब कोई उपयोगकर्ता उस URL पर जाता है, तो मुझे इस प्रक्रिया (स्पष्ट रूप से) को उल्टा करने की आवश्यकता है।

मैं इस बारे में जाने के लिए कुछ कठिन तरीकों के बारे में सोच सकता हूं, लेकिन मैं अनुमान लगा रहा हूं कि बेहतर हैं। कोई सुझाव?


जवाबों:


239

ASCII को int:

ord('a')

देता है 97

और वापस एक स्ट्रिंग के लिए:

  • पायथन 2 में: str(unichr(97))
  • पायथन 3 में: chr(97)

देता है 'a'


82
और बस chr () python3 में!
एहसान एम। करमानी

1
एससीआई वर्णों की सीमा में वर्ण शब्द (0 - 255), हालांकि, यूनिकोड यूनिकोड वर्ण सेट के लिए काम करता है।
शिवेंद्र सोनी


9

यदि एक वर्ण / पूर्णांक के अंदर कई अक्षर बंधे हैं, जैसा कि मेरा मुद्दा था:

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


2
पूछने के लिए धन्यवाद। मैं इसे ओपी में उपयोग के मामले से थोड़ा हटकर अनुदान दूंगा, यह देखते हुए कि बेस 64 या बेस 58 एनकोडिंग सबसे अधिक लागू होगा। मैं शीर्षक के आधार पर इस सवाल पर आया था, शाब्दिक रूप से एक पूर्णांक को एससीआई पाठ में परिवर्तित करना जैसे कि पूर्णांक में एससीआई एन्कोडेड डेटा को बाइट्स में एम्बेड किया गया है। मैंने इस उत्तर को उसी स्थिति में पोस्ट किया है जब अन्य लोग एक ही वांछित परिणाम के साथ यहां पहुंचे।
मैथ्यू डेविस

7

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

संख्या में वापस मोड़ना कोई बड़ी बात नहीं है।


2
यह भी खूब रही। मैंने एसओ पर एक और (अधिक पूर्ण) उत्तर खोजने का प्रयास किया, हालांकि: stackoverflow.com/questions/1119722/…
mlissner

-1

का उपयोग करें hex(id)[2:]और int(urlpart, 16)। अन्य विकल्प हैं। base32 एन्कोडिंग आपकी आईडी भी काम कर सकती है, लेकिन मुझे नहीं पता कि कोई भी लाइब्रेरी है जो बेस 32 एनकोडिंग को पायथन में निर्मित करती है।

स्पष्ट रूप से बेस 32 मॉड्यूल के साथ पायथन 2.4 में एक बेस 32 एनकोडर पेश किया गया था । आप का उपयोग करने की कोशिश कर सकते हैं b32encodeऔर b32decode। यदि लोग आपके छोटे URL को लिखते हैं Trueतो आपको casefoldऔर map01विकल्प दोनों के लिए देना चाहिए b32decode

वास्तव में, मैंने उसे वापस लिया। मुझे अभी भी लगता है कि base32 एन्कोडिंग एक अच्छा विचार है, लेकिन यह URL URL छोटा करने के मामले में उपयोगी नहीं है। आप मॉड्यूल में कार्यान्वयन को देख सकते हैं और इस विशिष्ट मामले के लिए अपना खुद का बना सकते हैं। :-)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.