ইউনিকোড ডিকোড এরর: 'এসকিআই' কোডেক পজিশনে 1x বাইটটি ডিকোড করতে পারে না


106

ইউটিএফ -8 এ স্ট্রিংটি এনকোড করার চেষ্টা করতে আমার কিছু সমস্যা হচ্ছে। আমি ব্যবহার করে string.encode('utf-8')এবং সহ অনেকগুলি জিনিস চেষ্টা করেছি unicode(string)তবে আমি ত্রুটি পেয়েছি:

ইউনিকোড ডিকোড এরর: 'এসকিআই' কোডেক বাইট 0x সিফটি পজিশন 1 তে ডিকোড করতে পারে না: সীমাবদ্ধ নয় (128)

এটি আমার স্ট্রিং:

(。・ω・。)ノ

আমি দেখছি কি ভুল হচ্ছে, কোন ধারণা?

সম্পাদনা: সমস্যাটি হ'ল স্ট্রিংটি যেমনটি সঠিকভাবে দেখা যায় না তেমন মুদ্রণ করা। এছাড়াও, আমি যখন এটিকে রূপান্তর করার চেষ্টা করি তখন এই ত্রুটি:

Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)

এটি কেবল একটি inোকানো স্ট্রিং। আমি যখন এটি মুদ্রণের চেষ্টা করি তখন একই ঘটনা ঘটে।
মার্কম

আমি একই যখন ইনস্টল PIP, এবং এখান থেকে এটা ঠিক পূরণ: [কিছু devel ইনস্টল] [1] [1]: stackoverflow.com/questions/17931726/...
BollMose

উত্তর:


70

এটি আপনার টার্মিনালটির এনকোডিংটি ইউটিএফ -8 এ সেট না করে করা হচ্ছে। এখানে আমার টার্মিনাল

$ echo $LANG
en_GB.UTF-8
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> 

আমার টার্মিনালে উদাহরণটি উপরের সাথে কাজ করে, তবে যদি আমি LANGসেটিংটি থেকে মুক্তি পেয়ে যাই তবে এটি কার্যকর হবে না

$ unset LANG
$ python
Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 1-5: ordinal not in range(128)
>>> 

কীভাবে এই পরিবর্তন স্থায়ী করা যায় তা আবিষ্কার করতে আপনার লিনাক্স বৈকল্পিকের জন্য ডক্সের সাথে পরামর্শ করুন।


1
লোকাল অনুপস্থিত হওয়ার কারণও হতে পারে। এগুলি ইনস্টল করতে চালাতে sudo apt-get install language-pack-deবা sudo locale-gen de_DE.UTF-8(জার্মান লোকালগুলির জন্য)।

আমার জন্য, অনুপস্থিত পরিবেশ পরিবর্তনশীল LC_ALL, এবং সহজ মান এটা ঠিক হবেC.UTF-8
রবিন উইন্সলো

24

চেষ্টা করে দেখুন:

string.decode('utf-8')  # or:
unicode(string, 'utf-8')

সম্পাদনা:

'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'.decode('utf-8')দেয় u'(\uff61\uff65\u03c9\uff65\uff61)\uff89', যা সঠিক।

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

আরও বলতে গেলে আমাদের কিছু কোড দেখতে হবে।


উভয়ই ফিরবেUnicodeEncodeError: 'charmap' codec can't encode characters in position 1-5: character maps to <undefined>
মার্কম

'(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
মার্কম

1
আমি যা করার চেষ্টা করছি তা হ'ল মূল স্ট্রিংটি মূল বিন্যাসে মুদ্রণ করা, তবে আমি পেয়েছি (´¢í´¢Ñ¤ë´¢Ñ´¢í)´¥ë
মার্কুম

4
এটি stringutf8- এনকোডড। আপনি যদি এটি মুদ্রণ করেন তবে এটি কেবল আউটপুট প্রবাহে বাইটগুলি wirites করে, এবং যদি আপনার টার্মিনাল এটি utf8 হিসাবে ব্যাখ্যা না করে তবে আপনি আবর্জনা দিয়ে শেষ করেন। সঙ্গে decodeআপনি ইউনিকোড তা রূপান্তর, তারপর আপনি যা করতে পারেন encodeএটা আবার একটি আপনার টার্মিনাল এনকোডিং বুঝতে পারে করতে।
মাতা

21

Https://stackoverflow.com/a/10561979/1346705 এবং নিক ক্রেগ-উডের বিক্ষোভের জন্য মাতার মন্তব্যে আমার +1 । আপনি স্ট্রিংটি সঠিকভাবে ডিকোড করেছেন। সমস্যাটি printকমান্ডের সাথে রয়েছে কারণ এটি ইউনিকোড স্ট্রিংটিকে কনসোল এনকোডিংয়ে রূপান্তর করে এবং কনসোলটি স্ট্রিংটি প্রদর্শন করতে সক্ষম হয় না। স্ট্রিংটি কোনও ফাইলটিতে লেখার চেষ্টা করুন এবং কিছু শালীন সম্পাদক যা ইউনিকোড সমর্থন করে ব্যবহার করে ফলাফলটি দেখুন:

import codecs

s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
s1 = s.decode('utf-8')
f = codecs.open('out.txt', 'w', encoding='utf-8')
f.write(s1)
f.close()

তাহলে দেখবেন (。・ω・。)ノ


10

আপনি যদি রিমোট হোস্টে কাজ /etc/ssh/ssh_configকরছেন তবে আপনার স্থানীয় পিসিতে দেখুন।

যখন এই ফাইলটিতে একটি লাইন থাকে:

SendEnv LANG LC_*

#লাইনের মাথায় যুক্ত করে মন্তব্য করুন । এটি সাহায্য করতে পারে।

এই লাইনের sshসাহায্যে আপনার পিসির ভাষা সম্পর্কিত পরিবেশের ভেরিয়েবলগুলি দূরবর্তী হোস্টে প্রেরণ করে । এটি অনেক সমস্যা সৃষ্টি করে।


ধন্যবাদ! এই সমস্যা যে আমি ansible এবং ভবঘুরে সঙ্গে পিপ প্যাকেজ ইনস্টল করার ছিল মীমাংসিত
Maritza মধ্যে Esparza

10

utf-8স্ক্রিপ্টের শুরুতে সিস্টেম ডিফল্ট এনকোডিংটি সেট করার চেষ্টা করুন , যাতে এটি ব্যবহার করে সমস্ত স্ট্রিং এনকোড হয়।

# coding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

এই ক্ষেত্রে আমাদের কেন পুনরায় লোডের দরকার?
ডাল

এখানে বর্ণিত পাইথন 3 এ এটি কাজ করে না । আমার জন্য, নীচে সুতুতুর উত্তরটি কৌশলটি করেছে।
পিয়ুশ গোয়েল

5

আপনার স্ক্রিপ্টের শীর্ষে নীচের কোডটি আন্দ্রেই ক্রাসুসটকির পরামর্শ অনুসারে ব্যবহার করা ভাল।

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

তবে আমি আপনাকে # -*- coding: utf-8 -*স্ক্রিপ্টের একেবারে শীর্ষে লাইন যুক্ত করার পরামর্শ দেব ।

যখন আমি মৃত্যুদন্ড কার্যকর করার চেষ্টা করি তখন তা ছাড় দেওয়া আমার ক্ষেত্রে ত্রুটির নীচে ফেলে দেয় basic.py

$ python basic.py
  File "01_basic.py", line 14
SyntaxError: Non-ASCII character '\xd9' in file basic.py on line 14, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

নিম্নলিখিতটি কোড উপস্থিত রয়েছে basic.pyযাতে ত্রুটির উপরে ছুঁড়ে ফেলা হয়।

ত্রুটি সহ কোড

from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def fill_document(doc):
    with doc.create(Section('ِش سثؤفهخى')):
        doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
        doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))

        with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
            doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')


if __name__ == '__main__':
    # Basic document
    doc = Document('basic')
    fill_document(doc)

তারপরে আমি # -*- coding: utf-8 -*-খুব উপরে লাইন যুক্ত করে মৃত্যুদন্ড কার্যকর করেছি। এটা কাজ করেছে.

ত্রুটি ছাড়াই কোড

# -*- coding: utf-8 -*-
from pylatex import Document, Section, Subsection, Command, Package
from pylatex.utils import italic, NoEscape

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

def fill_document(doc):
    with doc.create(Section('ِش سثؤفهخى')):
        doc.append('إخع ساخعمي شمصشغس سحثشن فاث فقعفا')
        doc.append(italic('فشمهؤ ؤخىفثىفس شقث شمسخ ىهؤث'))

        with doc.create(Subsection('آثص ٍعلاسثؤفهخى')):
            doc.append('بشةخعس ؤقشئغ ؤاشقشؤفثقس: $&#{}')


if __name__ == '__main__':
    # Basic document
    doc = Document('basic')
    fill_document(doc)

ধন্যবাদ।


1
এর #coding: utf-8চেয়ে বেশি ব্যবহার # -*- coding: utf-8 -*- করা মনে রাখা সহজ। পাইথন পিইপি 263 - বাক্সটি পাইথন সোর্স কোড এনকোডিংস সংজ্ঞায়িত করে বাক্সের বাইরে চলে ।
আন্ড্রেই ক্রাসসতস্কি

পরামর্শের জন্য ধন্যবাদ. আমার শেষে চেষ্টা করে দেখুন এবং উত্তরে আপডেট করুন।
hygull

4

আমার টার্মিনাল নিয়ে কোনও সমস্যা নেই। উপরের উত্তরগুলি আমাকে সঠিক দিকগুলি অনুসন্ধান করতে সহায়তা করেছিল তবে আমি যোগ না করা পর্যন্ত এটি আমার পক্ষে কার্যকর হয়নি 'ignore':

fix_encoding = lambda s: s.decode('utf8', 'ignore')

নীচের মন্তব্যে ইঙ্গিত হিসাবে, এটি অনাকাঙ্ক্ষিত ফলাফল হতে পারে। এছাড়াও এটি কাজ করার জন্য কৌশলটি যথেষ্ট পরিমাণে করতে পারে এবং কিছু চরিত্র হারাতে আপনার কোনও যত্ন নেই।


2
এটি ভুল, আপনি নিজের এনকোডিং ল্যাম্বদা ফাংশনটিকে এনকোডিংটিকে উপেক্ষা করতে বাধ্য করছেন যার অর্থ আপনি অক্ষরগুলি হারাচ্ছেন।
ম্যাক্সিমিলিয়ানো রিওস

2
এটি আমার সমস্যার সমাধান করে, যেখানে আমি মূল এনকোডিংটি জানতাম না এবং আমি কিছু অক্ষর হারানোর বিষয়ে চিন্তা করি না।
এডহোলার

2

এটি উবুন্টু 15.10 এর জন্য কাজ করে:

sudo locale-gen "en_US.UTF-8"
sudo dpkg-reconfigure locales

1

দেখে মনে হচ্ছে আপনার স্ট্রিংটি এনকোড করা আছে utf-8, তাই সমস্যাটি আসলে কী? বা আপনি এখানে কি করার চেষ্টা করছেন ..?

Python 2.7.3 (default, Apr 20 2012, 22:39:59) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = '(\xef\xbd\xa1\xef\xbd\xa5\xcf\x89\xef\xbd\xa5\xef\xbd\xa1)\xef\xbe\x89'
>>> s1 = s.decode('utf-8')
>>> print s1
(。・ω・。)ノ
>>> s2 = u'(。・ω・。)ノ'
>>> s2 == s1
True
>>> s2
u'(\uff61\uff65\u03c9\uff65\uff61)\uff89'

মূল স্ট্রিং যেমনটি দেওয়া হয় তেমন মুদ্রণ করা হচ্ছে (´¢í´¢Ñ¤ë´¢Ñ´¢í)´¥ë, আমি এটি সঠিকভাবে এনকোড করতে চাই।
মারকুম

1

আমার ক্ষেত্রে এটি আমার ইউনিকোড ফাইলটিকে "বিওএম" দিয়ে সংরক্ষণ করার কারণে হয়েছিল। এটি সমাধান করার জন্য, আমি বিবিইডিট ব্যবহার করে ফাইলটি খুলি এবং "ইউনিকোড (ইউটিএফ -8)" এনকোডিংয়ের জন্য একটি "হিসাবে সংরক্ষণ করুন ..." বেছে নিয়েছিলাম এবং এটি "ইউনিকোড (ইউটিএফ -8, বিওএম সহ) ছিল না তা নয়" "


0

আমি একই ধরণের ত্রুটি পেয়েছিলাম এবং আমি দেখতে পেলাম যে কনসোল অন্য ভাষায় স্ট্রিংটি প্রদর্শন করতে সক্ষম নয়। তাই আমি ইউটিএফ -8 হিসাবে ডিফল্ট_চারসেট সেট করতে নীচের কোড পরিবর্তন করেছি।

data_head = [('\x81\xa1\x8fo\x89\xef\x82\xa2\x95\xdb\x8f\xd8\x90\xa7\x93x\x81\xcb3\x8c\x8e\x8cp\x91\xb1\x92\x86(\x81\x86\x81\xde\x81\x85)\x81\xa1\x8f\x89\x89\xf1\x88\xc8\x8aO\x81A\x82\xa8\x8b\xe0\x82\xcc\x90S\x94z\x82\xcd\x88\xea\x90\xd8\x95s\x97v\x81\xa1\x83}\x83b\x83v\x82\xcc\x82\xa8\x8e\x8e\x82\xb5\x95\xdb\x8c\xaf\x82\xc5\x8fo\x89\xef\x82\xa2\x8am\x92\xe8\x81\xa1', 'shift_jis')]
default_charset = 'UTF-8' #can also try 'ascii' or other unicode type
print ''.join([ unicode(lin[0], lin[1] or default_charset) for lin in data_head ])


-1

বম, এটি প্রায়শই আমার জন্য বিওএম হয়

vi ফাইল, ব্যবহার

:set nobomb

এবং এটি সংরক্ষণ করুন। এটি প্রায়শই আমার ক্ষেত্রে এটি স্থির করে দেয়


-1

অ-এসকিআই অক্ষরযুক্ত ইউআরএলগুলির সাথে আমার একই ত্রুটি ছিল (মানগুলির সাথে বাইটস> 128)

url = url.decode('utf8').encode('utf-8')

পাইথন ২.7-এ আমার জন্য কাজ করেছেন, আমি মনে করি strঅভ্যন্তরীণ উপস্থাপনায় এই কার্যভারটি 'কিছু' বদলেছে - যেমন, এটি ব্যাকড বাইট সিকোয়েন্সটির ডান ডিকোডিংকে জোর করে urlএবং পরিশেষে সমস্ত যাদুতে স্ট্রিংটিকে একটি utf-8 এ রাখে strযথাস্থান. পাইথনের ইউনিকোড আমার কাছে কালো জাদু। আশা করি কাজে লাগবে


-2

আমি ফাইলটি সেটিংসে পরিবর্তন করে সমস্যার সমাধান করি py


@ রাইরিং আপনি কি আপনার সম্পাদনার কারণ ব্যাখ্যা করতে পারেন? কোনও ওপেনের রচনার বিরুদ্ধে সুপারিশ করা থেকে শুরু করে ওপি যা লিখেছিল তার অর্থ পুরোপুরি বদলে গেছে বলে মনে হয় ।
কেউ 21

@ অ্যান্ড্রুমেডিকো - আমার ক্ষমা। আমি দেখেছি যে এই পোস্টটি অন্য একটির সাথে খুব মিল, তাই আমি বিশ্বাস করি যে তারা একই ছিল। আমি ফিরে যাব।
রায়রেং

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