"লাইনের জন্য ..." ইউনিকোডডাইকোড এরর ফলাফল: 'utf-8' কোডেক বাইট ডিকোড করতে পারে না


214

এখানে আমার কোড,

for line in open('u.item'):
#read each line

আমি যখনই এই কোডটি চালনা করি এটি নিম্নলিখিত ত্রুটিটি দেয়:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte

আমি এটি সমাধান করার চেষ্টা করেছি এবং খোলা () তে একটি অতিরিক্ত প্যারামিটার যুক্ত করেছি, কোডটি দেখে মনে হচ্ছে;

for line in open('u.item', encoding='utf-8'):
#read each line

কিন্তু আবার এটি একই ত্রুটি দেয়। আমার তখন কি করা উচিত! সাহায্য করুন.


3
খারাপভাবে এনকোড করা ডেটা আমি ধরে নেব।
Andreas Jung

9
বা শুধু ইউটিএফ -8 ডেটা নয়।
মার্ক টোলোনেন


পাইথন ২.7 এর পরিবর্তে পাইথন ৩ ব্যবহার করার সময় আমাদের কাছে এই সমস্যাটি ছিল পিকপ্যাকের সাথে। আমাদের জন্য, অ্যাকটিশনটি ছিল অজগর ২.7 নিয়ে কাজ করা।
জেসি ডাব্লু। কলিন্স

উত্তর:


402

মার্ক র্যানসমের পরামর্শ অনুসারে, আমি এই সমস্যার জন্য সঠিক এনকোডিং পেয়েছি। এনকোডিং "ISO-8859-1-" ছিল, তাই প্রতিস্থাপন open("u.item", encoding="utf-8")সঙ্গে open('u.item', encoding = "ISO-8859-1")সমস্যার সমাধান হবে।


8
সুস্পষ্ট বর্ণনামূলক চেয়ে ভাল (পিইপি 20)।
আইওনিস ফিলিপিসিস

6
কৌশলটি হ'ল আইএসও -8859-1 বা ল্যাটিন_1 8 বিটের অক্ষর সেট, সুতরাং সমস্ত আবর্জনার একটি বৈধ মান রয়েছে। সম্ভবত ব্যবহারযোগ্য না, তবে আপনি যদি উপেক্ষা করতে চান!
কেজেল্ড ফ্লার্প

1
আমার একই সমস্যা ছিল ইউনিকোড ডিকোড এরিয়ার: 'utf-8' কোডেক 32x অবধি 0xd0 বাইট ডিকোড করতে পারে না: অবৈধ ধারাবাহিকতা বাইট। আমি নিউজ ক্লিপ ইনস্টল করার জন্য অজগরটি 3.6.5 ব্যবহার করেছি। এবং যখন আমি প্রথম - পরিবর্তনের চেষ্টা করেছি তখন এই ত্রুটিটি এটি ব্যর্থ হয়েছিল। তাই আমি সম্পাদন করা /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/configparser.py ছিল এবং নিচের কোড পরিবর্তিত Def পড়ুন (স্ব, ফাইলের নাম, এনকোডিং = "ISO-8859-1-" ):
Евгений Коптюбенко

3
এনকোডিং সনাক্ত করার কোনও স্বয়ংক্রিয় উপায় আছে?
অরেঞ্জসার্বেট

5
@ ওরেঞ্জ শেরবেট ব্যবহার করে সনাক্তকরণ কার্যকর করেছি chardet। এখানে এক-লাইনের (পরে এর import chardet): chardet.detect(open(in_file, 'rb').read())['encoding']। : বিস্তারিত জানার জন্য এই উত্তর চেক আউট stackoverflow.com/a/3323810/615422
VertigoRay

51

আমার জন্যও কাজ করেছে, আইএসও 8859-1 অনেকটা বাঁচাতে চলেছে, হাহাহা, প্রধানত যদি স্পিচ রিকগনিশন এপিআই ব্যবহার করে

উদাহরণ:

file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1");

4
আপনি সঠিক হতে পারেন যে ওপি ISO 8859-1 পড়ছে, ত্রুটি বার্তায় 0xe9 (é) থেকে অনুমান করা যেতে পারে তবে আপনার সমাধানটি কেন কাজ করে তা আপনাকে ব্যাখ্যা করা উচিত। বক্তৃতা সনাক্তকরণের এপিআইয়ের রেফারেন্স কোনও সাহায্য করে না।
রল্ফব্লি

5
আধা-কোলনের সাথে কী আছে?
ডান পা

29

আপনার ফাইলটিতে আসলে utf-8 এনকোডড ডেটা নেই, এতে অন্য কিছু এনকোডিং রয়েছে। সেই এনকোডিংটি কী তা নির্ধারণ করুন এবং openকলটিতে এটি ব্যবহার করুন।

উইন্ডোজ -১২২২ এ এনকোডিংয়ের উদাহরণস্বরূপ 0xe9চরিত্রটি হবে é


4
সুতরাং, কীভাবে এটি এনকোডিং হয় তা আমি খুঁজে পেতে পারি! আমি
লিনাক্সটি

4
: এই প্রশ্নের যে সবসময় কাজ করে না, কিন্তু দেখতে উত্তর কোন উপায় নেই stackoverflow.com/questions/436220/...
RemcoGerlich

20

পান্ডা ব্যবহার করে এটি পড়ার চেষ্টা করুন

pd.read_csv('u.item', sep='|', names=m_cols , encoding='latin-1')

আপনি পান্ডাদের পরামর্শ দিচ্ছেন না কেন তা নিশ্চিত নন। সমাধানটি সঠিক এনকোডিংটি সেট করছে যা আপনি এখানে ছুটে এসেছেন।
অ্যালিস্টার ম্যাককর্মাক

12

আপনি Python 2নিম্নলিখিতটি ব্যবহার করলে সমাধানটি হবে:

import io
for line in io.open("u.item", encoding="ISO-8859-1"):
    # do something

কারণ encodingপরামিতি সাথে কাজ করে না open(), আপনি নিম্নলিখিত ত্রুটি পেয়ে হবে:

TypeError: 'এনকোডিং' এই ফাংশনের জন্য একটি অবৈধ কীওয়ার্ড আর্গুমেন্ট

1
তবে এটি সংস্করণ 3
সুজিতস

1
হ্যাঁ আমি জানি. আমি ভেবেছিলাম এটি ব্যবহারকারীর পক্ষে সহায়ক হতে পারেPython 2
জেরিল

পাইথন 3 এও আমার জন্য কাজ করেছিলেন
fenkerbb

2
আপনি মনে রাখার চেয়ে সহজ কিছু চাইলে 'ISO-8859-1'এটি হিসাবে 'latin-1'বা হিসাবে পরিচিত 'latin1'
সর্বাধিক Candocia

9

আপনি এই সমস্যার সমাধান করতে পারেন:

for line in open(your_file_path, 'rb'):

'rb' বাইনারি মোডে ফাইল পড়ছে। এখানে আরও পড়ুন । আশা করি এটি সাহায্য করবে!



2

যদি কেউ এগুলি সন্ধান করে তবে এটি পাইথন 3 এ কোনও সিএসভি ফাইল রূপান্তর করার উদাহরণ:

try:
    inputReader = csv.reader(open(argv[1], encoding='ISO-8859-1'), delimiter=',',quotechar='"')
except IOError:
    pass

2

কখনও কখনও যখন open(filepath)যা filepathআসলে না থাকা অবস্থায় কোনো ফাইল নিশ্চিত আপনি যে ফাইলটি বিদ্যমান খোলার চেষ্টা করছেন তা একই ভুল হবে, তাই প্রথমত:

import os
assert os.path.isfile(filepath)

আশা করি এটি সাহায্য করবে


1

আপনি এইভাবে চেষ্টা করতে পারেন:

open('u.item', encoding='utf8', errors='ignore')

এটি প্রশ্নের উত্তর দেয় না। কোনও লেখকের কাছ থেকে সমালোচনা বা স্পষ্টতার জন্য অনুরোধ জানাতে, তাদের পোস্টের নীচে একটি মন্তব্য দিন। - পর্যালোচনা থেকে
মার্টেনগ্যাচার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.