ASCII- তে রূপান্তর করুন এবং পাইথনে ফিরে আসুন


137

আমি আমার সাইটের জন্য একটি ইউআরএল সংক্ষিপ্ত তৈরির কাজ করছি, এবং আমার বর্তমান পরিকল্পনা (আমি পরামর্শের জন্য উন্মুক্ত) হ'ল সংক্ষিপ্ত URL তৈরি করার জন্য নোড আইডি ব্যবহার করা। সুতরাং, তত্ত্ব হিসাবে, নোড 26 হতে পারে short.com/z, নোড 1 হতে পারে short.com/a, নোড 52 হতে পারে short.com/Z, এবং নোড 104 হতে পারে short.com/ZZ। যখন কোনও ব্যবহারকারী সেই ইউআরএল যায় তখন আমার প্রক্রিয়াটি বিপরীত করা উচিত (স্পষ্টতই)।

আমি এটি সম্পর্কে কিছু দুর্গন্ধযুক্ত উপায়গুলি ভাবতে পারি, তবে আমি অনুমান করছি আরও ভাল উপায় আছে। কোনও পরামর্শ?


উত্তর:


239

ASCII থেকে int:

ord('a')

দেয় 97

এবং একটি স্ট্রিং ফিরে:

  • পাইথন 2 এ: str(unichr(97))
  • পাইথন 3 এ: chr(97)

দেয় 'a'


82
এবং অজগর 3 এ কেবল chr ()!
এহসান এম। কারমানি

1
চিঠি শব্দের ascii অক্ষরের পরিসীমা (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 এনকোডিং সর্বাধিক প্রযোজ্য হবে তবে আমি ওপিতে এটি ব্যবহারের সামান্য ছাড়িয়ে দেব grant আমি শিরোনামের উপর ভিত্তি করে এই প্রশ্নটিতে এসে পৌঁছেছি, আক্ষরিক অর্থে একটি পূর্ণসংখ্যাকে ascii পাঠ্যে রূপান্তর করে এমনভাবে যদি পূর্ণসংখ্যার ascii এনকোড করা ডেটা তার বাইটগুলিতে এম্বেড থাকে। অন্যরা এখানে একই কাঙ্ক্ষিত ফলাফল নিয়ে আসার ইভেন্টে আমি এই উত্তরটি পোস্ট করেছি।
ম্যাথু ডেভিস

7

ইউএসএল এনকোডিং 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)। অন্যান্য বিকল্প আছে। আপনার আইডি বেস 32 এনকোডিংটিও কাজ করতে পারে তবে আমি জানি না যে এমন কোনও লাইব্রেরি রয়েছে যা পাইথনের মধ্যে নির্মিত বেস 32 এনকোডিং করে।

স্পষ্টতই বেস 64৪ মডিউলটি দিয়ে পাইথন ২.৪ এ একটি বেস 32 এনকোডারটি চালু করা হয়েছিল । ব্যবহার করে আপনি চেষ্টা করতে পারে b32encodeএবং b32decode। আপনার সংক্ষিপ্ত URL গুলি লোকেদের লেখার ক্ষেত্রে আপনার Trueদুটি casefoldএবং map01বিকল্পের জন্য দেওয়া উচিত b32decode

আসলে, আমি এটি পিছনে নিতে। আমি এখনও মনে করি বেস 32 এনকোডিংটি একটি ভাল ধারণা, তবে ইউআরএল সংক্ষিপ্তকরণের ক্ষেত্রে সেই মডিউলটি কার্যকর নয়। আপনি মডিউলে বাস্তবায়নটি দেখতে এবং এই নির্দিষ্ট ক্ষেত্রেটির জন্য নিজের তৈরি করতে পারেন। :-)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.