পাথ ভেরিয়েবলের এনকোডিং এবং এটি এসকিউএল ডাটাবেসে সন্নিবেশ করানোর ক্ষেত্রে আমার একটি সমস্যা আছে । আমি এটিকে এনকোড ("utf-8") ফাংশন দিয়ে সমাধান করার চেষ্টা করেছি যা সাহায্য করে না। তারপরে আমি ইউনিকোড () ফাংশন ব্যবহার করি যা আমাকে ইউনিকোড টাইপ করে ।
print type(path) # <type 'unicode'>
path = path.replace("one", "two") # <type 'str'>
path = path.encode("utf-8") # <type 'str'> strange
path = unicode(path) # <type 'unicode'>
অবশেষে আমি ইউনিকোড টাইপ অর্জন করেছি , তবে আমার এখনও একই ত্রুটি রয়েছে যা পাথ ভেরিয়েবলের ধরণ যখন স্ট্রিং ছিল তখন উপস্থিত ছিল
sqlite3.ProgrammingError: আপনি 8-বিট বাইটস্ট্রিংগুলি ব্যবহার করা উচিত না আপনি যদি না এমন টেক্সট_ফ্যাক্টরি ব্যবহার করেন যা 8-বিট বাইটস্ট্রিংগুলি ব্যাখ্যা করতে পারে (যেমন টেক্সট_ফ্যাক্টরি = str)) এটির পরিবর্তে আপনার ইউনিকোড স্ট্রিংগুলিতে আপনার অ্যাপ্লিকেশনটি স্যুইচ করার পরামর্শ দেওয়া হচ্ছে।
আপনি কি আমাকে এই ত্রুটিটি সমাধান করতে এবং সঠিক ব্যবহার encode("utf-8")
এবং unicode()
কার্যকারিতা ব্যাখ্যা করতে সহায়তা করতে পারেন ? আমি প্রায়শই এর সাথে লড়াই করছি।
সম্পাদনা:
এই কার্যকর () বিবৃতি ত্রুটি উত্থাপিত:
cur.execute("update docs set path = :fullFilePath where path = :path", locals())
আমি পুরো ফিলিপথ ভেরিয়েবলের এনকোডিংটি পরিবর্তন করতে ভুলে গিয়েছিলাম যা একই সমস্যার সাথে ভুগছে তবে আমি এখন বেশ বিভ্রান্ত। আমার কি কেবল ইউনিকোড () বা এনকোড ("utf-8") বা উভয় ব্যবহার করা উচিত?
আমি ব্যবহার করতে পারি না
fullFilePath = unicode(fullFilePath.encode("utf-8"))
কারণ এটি এই ত্রুটি উত্থাপন করে:
ইউনিকোড ডিকোড এরর: 'এসকিআই' কোডেক 32x পজিশনে 0xc5 বাইট ডিকোড করতে পারে না: সীমাবদ্ধ নয় (128)
পাইথন সংস্করণটি 2.7.2