ইউনিকোড ডিকোড এরর: 'চারম্যাপ' কোডেক বাইট এক্সকে পজিশনে ডিকোড করতে পারে না Y: অক্ষরের মানচিত্র <অপরিবর্তিত>


549

আমি তথ্য দিয়ে ভরা একটি পাঠ্য ফাইলের সাথে কিছু হেরফের করার জন্য পাইথন 3 প্রোগ্রাম পাওয়ার চেষ্টা করছি। তবে ফাইলটি পড়ার চেষ্টা করার সময় আমি নিম্নলিখিত ত্রুটিটি পেয়েছি:

 Traceback (most recent call last):  
     File "SCRIPT LOCATION", line NUMBER, in <module>  
     `text = file.read()`  
     File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode  
     `return codecs.charmap_decode(input,self.errors,decoding_table)[0]`  
     UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to `<undefined>`  

2
একই ত্রুটির জন্য এই সমাধানগুলি আমাকে সহায়তা করেছে, চর্চা ত্রুটির সমাধান
শুভম শর্মা

2
আপনি কেন এই ত্রুটিটি পান তা বোঝার জন্য পাইথন 3 এ প্রক্রিয়াকরণ পাঠ্য ফাইলগুলি দেখুন ।
আন্দ্রেস হাফারবার্গ

উত্তর:


958

প্রশ্নযুক্ত ফাইলটি CP1252এনকোডিং ব্যবহার করছে না । এটি অন্য একটি এনকোডিং ব্যবহার করছে। কোনটি আপনি নিজেকে খুঁজে বের করতে হবে। সাধারণগুলি হয় Latin-1এবং UTF-8। যেহেতু 0x90 আসলে কিছুই বোঝায় না Latin-1, UTF-8(যেখানে 0x90 একটি ধারাবাহিকতা বাইট) বেশি সম্ভাবনা রয়েছে।

আপনি ফাইলটি খোলার সময় আপনি এনকোডিং নির্দিষ্ট করেছেন:

file = open(filename, encoding="utf8")

19
দুর্দান্ত, আমার পাইথন ২.7 কোডটি চালানোর চেষ্টা করেছি বলে পাইথন ২.7 কোড নিয়ে আমার সমস্যা ছিল। লাতিন -১ আমার পক্ষে কাজ করেছে!
1vand1ng0

2
যদি আপনি পাইথন ২.7 ব্যবহার করেন এবং একই ত্রুটিটি পেয়ে থাকেন তবে ioমডিউলটি ব্যবহার করে দেখুন:io.open(filename,encoding="utf8")
ক্রাইস্টোফের্লোভেল

9
@ 1vand1ng0: অবশ্যই ল্যাটিন -1 কাজ করে; ফাইলটির প্রকৃত এনকোডিংটি নির্বিশেষে এটি যে কোনও ফাইলের জন্য কাজ করবে। এটি কারণ যে কোনও ফাইলের সমস্ত 256 সম্ভাব্য বাইট মানগুলিতে ম্যাপ করার জন্য ল্যাটিন -1 কোডপয়েন্ট রয়েছে, তবে এর অর্থ এই নয় যে আপনি সুস্পষ্ট ফলাফল পাবেন! আপনি যদি এনকোডিংটি জানেন না, এমনকি ফাইলটি বাইনারি মোডে খোলার পরিবর্তে লাতিন -1 ধরে নেওয়া আরও ভাল।
মার্টিজন পিটারস

1
এটি ডিফল্টরূপে ইউনিকোড, তবে ইউনিকোড কোনও এনকোডিং নয়। regebro.wordpress.com/2011/03/23/…
লেনার্ট রেজেব্রো

1
filename = "C:\Report.txt" with open(filename,encoding ="utf8") as my_file: text = my_file.read() print(text)এমনকি এটি ব্যবহার করার পরেও আমি একই ত্রুটি পাচ্ছি। আমি অন্যান্য এনকোডিং দিয়ে চেষ্টা করেছি তবে সব বৃথা। এই কোড আমি ব্যবহার করছি from geotext import GeoText। একটি সমাধান পরামর্শ দিন।
সালাহ

47

শুধু ক্ষেত্রে যোগ file = open(filename, encoding="utf8")করার চেষ্টা চেষ্টা করে নাfile = open(filename, errors='ignore')


অনেক ধন্যবাদ - আমি এটি দিয়ে চেষ্টা করব। আমার কিছু যত্ন নেই এমন ফাইলগুলির অংশগুলিতে কিছু অবৈধ অক্ষর রয়েছে।
স্টিফেন নট

6
সতর্কতা: অজানা অক্ষরগুলির মুখোমুখি হওয়ার সময় এটি ডেটা হারাবে (যা আপনার পরিস্থিতির উপর নির্ভর করে ভাল হতে পারে)।
হান্স গোল্ডম্যান

34

@ লেনার্টেরেজিব্রোর উত্তরের এক্সটেনশন হিসাবে :

আপনার ফাইলটি কী এনকোডিং করছে এবং উপরের সমাধানটি কাজ করে না তা যদি আপনি বলতে না পারেন (এটি নয় utf8) এবং আপনি নিজেকে অনুমান করে দেখতে পেয়েছেন - এমন অনলাইন সরঞ্জাম রয়েছে যা আপনি কী এনকোডিংটি সনাক্ত করতে ব্যবহার করতে পারেন। এগুলি নিখুঁত নয় তবে সাধারণত ঠিক কাজ করে। এনকোডিংটি বের করার পরে আপনার উপরের সমাধানটি ব্যবহার করা উচিত।

সম্পাদনা: (মন্তব্য থেকে অনুলিপি করা)

বেশ জনপ্রিয় পাঠ্য সম্পাদককে Sublime Textযদি সেট করা থাকে তবে এনকোডিং প্রদর্শন করার জন্য একটি কমান্ড রয়েছে ...

  1. যান View-> Show Console(অথবা Ctrl+ + `)

এখানে চিত্র বর্ণনা লিখুন

  1. নীচে ফিল্ডে টাইপ করুন view.encoding()এবং সেরাটির জন্য আশা করুন (আমি কিছুই পেতে পারি না Undefinedতবে সম্ভবত আপনার ভাগ্য ভাল হবে ...)

এখানে চিত্র বর্ণনা লিখুন


2
কিছু পাঠ্য সম্পাদকও এই তথ্য সরবরাহ করবেন। আমি জানি যে ভিমের সাহায্যে আপনি এটি :set fileencoding( এই লিঙ্ক থেকে ) এর মাধ্যমে পেতে পারেন
প্যাক্সরোমানা99

3
সাব্লাইম টেক্সট, এছাড়াও - কনসোলটি খুলুন এবং টাইপ করুন view.encoding()
জিম্মিডিজু

বিকল্পভাবে, আপনি নোটপ্যাড দিয়ে আপনার ফাইল খুলতে পারেন। 'হিসাবে সংরক্ষণ করুন' এবং আপনি ব্যবহৃত এনকোডিংয়ের সাথে একটি ড্রপ-ডাউন দেখতে পাবেন
don_Gunner94

9

বিকল্পভাবে যদি আপনার ফাইলটি ডিকোড করার দরকার না হয় যেমন কোনও ওয়েবসাইটে ফাইল আপলোড করা open(filename, 'rb'),। r = পড়া, খ = বাইনারি


আপনাকে ধন্যবাদ যে আমার সমস্যার জন্য কেস ছিল
শাহিন gh

6

TLDR? চেষ্টা করুন:file = open(filename, encoding='cp437)

কেন? যখন একটি ব্যবহার:

file = open(filename)
text = file.read()

পাইথন ধরে নিয়েছে যে ফাইলটি বর্তমান পরিবেশ হিসাবে একই কোড কোড ব্যবহার করে (খোলার পোস্টের ক্ষেত্রে cp1252) এবং এটির নিজস্ব ডিফল্ট ইউটিএফ -8 এ ডিকোড করার চেষ্টা করে। যদি ফাইলটিতে এই কোডপেজ (0x90 এর মতো) সংজ্ঞায়িত না হওয়া মানগুলির অক্ষর থাকে তবে আমরা ইউনিকোডডেকোডেরর পাই। কখনও কখনও আমরা ফাইলটির এনকোডিং জানি না, কখনও কখনও ফাইলের এনকোডিংটি পাইথন (যেমন সিপি 90৯০ এর মতো) দ্বারা হাতছাড়া করা যায়, কখনও কখনও ফাইলটিতে মিশ্র এনকোডিং থাকতে পারে।

যদি এই জাতীয় অক্ষরগুলি বিনা অপ্রয়োজনীয় হয়, তবে কেউ প্রশ্ন চিহ্ন দ্বারা সেগুলি প্রতিস্থাপনের সিদ্ধান্ত নিতে পারে, এর সাথে:

file = open(filename, errors='replace')

আর একটি কাজ হ'ল:

file = open(filename, errors='ignore')

অক্ষরগুলি অক্ষত রেখে দেওয়া হয়েছে তবে অন্যান্য ত্রুটিগুলিও মুখোশ করা হবে।

বেশ ভাল সমাধানটি এনকোডিং নির্দিষ্ট করা, তবুও কোনও এনকোডিং নয় (যেমন সিপি 1252), তবে যা সমস্ত অক্ষর সংজ্ঞায়িত করেছে (যেমন সিপি 437):

file = open(filename, encoding='cp437')

কোডপেজ 437 হ'ল আসল ডস এনকোডিং। সমস্ত কোড সংজ্ঞায়িত করা হয়েছে, সুতরাং ফাইলটি পড়ার সময় কোনও ত্রুটি নেই, কোনও ত্রুটি মুখোশযুক্ত করা হয়নি, অক্ষরগুলি সংরক্ষণ করা হয়েছে (যথেষ্ট অক্ষত নয় তবে এখনও পৃথকযোগ্য)।


1
বাহ, আপনাকে ধন্যবাদ। এটি আমার জন্য একমাত্র ডিকোডিংয়ের কাজ।
কোওলস্কি

1

উইন্ডোজের অ্যানাকোন্ডায় যারা কাজ করেন তাদের ক্ষেত্রেও আমার একই সমস্যা ছিল। নোটপ্যাড ++ আমাকে এটি সমাধান করতে সহায়তা করে।

নোটপ্যাড ++ এ ফাইলটি খুলুন। নীচে ডানদিকে এটি আপনাকে বর্তমান ফাইল এনকোডিংটি বলবে। শীর্ষ মেনুতে, "ভিউ" এর পরে "এনকোডিং" সনাক্ত করুন। "এনকোডিং" এ "অক্ষর সেটগুলি" তে যান এবং সেখানে প্যাটিএনটি সহ আপনার প্রয়োজনীয় এনকোন্ডিং সন্ধান করুন। আমার ক্ষেত্রে এনকোডিং "উইন্ডোজ -১২২২" "ওয়েস্টার্ন ইউরোপীয়" এর অধীনে পাওয়া গেছে


1

আপনার সময় নষ্ট করা বন্ধ করুন, কেবলমাত্র পড়ুন এবং লিখুন উভয়ই নিম্নলিখিত encoding="cp437"এবং errors='ignore'আপনার কোডটিতে যুক্ত করুন:

open('filename.csv', encoding="cp437", errors='ignore')
open(file_name, 'w', newline='', encoding="cp437", errors='ignore')

Godspeed


অবশ্যই জনাব. রোজার যে। সময় নষ্ট হয় না ধন্যবাদ. আপনি কি এক কাপ কফি বা সূক্ষ্ম ওয়াইন চান?
প্রমেশ বাজরাচার্য

0

আমার কোড হিসাবে মাইএসকিএল চরিত্রটি এনকোডিং পরিবর্তনের ফলে সমাধানটি বাছাই করতে সহায়তা করেছে। `ফটো = খোলা ('pic3.png', এনকোডিং = ল্যাটিন 1), শক্তিশালী পাঠ্য এখানে চিত্র বর্ণনা লিখুন

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