পাইথন, ইউনিকোড এবং উইন্ডোজ কনসোল


145

আমি যখন উইন্ডোজ কনসোলে কোনও ইউনিকোড স্ট্রিং প্রিন্ট করার চেষ্টা করি তখন আমি একটি UnicodeEncodeError: 'charmap' codec can't encode character ....ত্রুটি পাই । আমি ধরে নিলাম এটি কারণ উইন্ডোজ কনসোলটি ইউনিকোড-কেবলমাত্র অক্ষরগুলি গ্রহণ করে না। এর সর্বোত্তম উপায় কি? ?এই পরিস্থিতিতে ব্যর্থ হওয়ার পরিবর্তে পাইথনকে স্বয়ংক্রিয়ভাবে মুদ্রণ করার কোনও উপায় আছে কি ?

সম্পাদনা: আমি পাইথন 2.5 ব্যবহার করছি।


দ্রষ্টব্য: @ লাসেভি.কার্লসেন উত্তরটি চেকমার্ক সহ এক ধরণের পুরানো (২০০৮ থেকে)। নীচে সমাধান / উত্তর / পরামর্শ যত্ন সহ ব্যবহার করুন !!

@ জেএসএবেস্টিয়ান উত্তরটি আজ (Jan জানুয়ারী ২০১ )) হিসাবে আরও প্রাসঙ্গিক।


পাইথনের কোন সংস্করণ আপনি চালু করছেন? আমি উল্লেখগুলি দেখেছি যে এটি 2.4.3 এ ভাঙ্গা হয়েছিল এবং 2.4.4 এ স্থির হয়েছিল।
স্টু

3
সম্পর্কিত: bugs.python.org/issue1602
jfs

পরীক্ষা এই বাইরে।
সৌরেনা

1
pyhton মধ্যে cmd কমান্ড ব্যবহার করার আগে chcp 65001: অধিকাংশ সহজ উত্তর যে আমি পাওয়া টাইপ করতে হয়
Soorena

1
তারপরে আপনার আপনার স্বীকৃত উত্তরটি পরিবর্তন করা উচিত ...
মিস্টার_আর_মিসি_ডি

উত্তর:


38

দ্রষ্টব্য: এই উত্তরটি পুরানো বাছাই (২০০৮ থেকে)। দয়া করে নীচের সমাধানটি যত্ন সহকারে ব্যবহার করুন !!


এখানে একটি পৃষ্ঠায় যে সমস্যা এবং একটি সমাধান (পাঠ্য জন্য পৃষ্ঠা অনুসন্ধান বিবরণ একটি দৃষ্টান্ত মধ্যে মোড়ানো sys.stdout ):

প্রিন্টফেইলস - পাইথন উইকি

এই পৃষ্ঠা থেকে একটি কোড উদ্ধৃতি এখানে:

$ python -c 'import sys, codecs, locale; print sys.stdout.encoding; \
    sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout); \
    line = u"\u0411\n"; print type(line), len(line); \
    sys.stdout.write(line); print line'
  UTF-8
  <type 'unicode'> 2
  Б
  Б

  $ python -c 'import sys, codecs, locale; print sys.stdout.encoding; \
    sys.stdout = codecs.getwriter(locale.getpreferredencoding())(sys.stdout); \
    line = u"\u0411\n"; print type(line), len(line); \
    sys.stdout.write(line); print line' | cat
  None
  <type 'unicode'> 2
  Б
  Б

সেই পৃষ্ঠাতে আরও কিছু তথ্য রয়েছে, পড়ার পক্ষে ভাল।


7
লিঙ্কটি মারা গেছে এবং উত্তরের सारটি উদ্ধৃত হয়নি। -1
0xC0000022L

1
আমি যখন মোড়ানো সম্পর্কে প্রদত্ত পরামর্শটি চেষ্টা করি তখন sys.stdoutএটি ভুল জিনিসগুলি মুদ্রণ করে। উদাহরণস্বরূপ, এন-ড্যাশের পরিবর্তে u'\u2013'হয়ে যায় û
ব্যবহারকারী 2357112

@ user2357112 আপনাকে সে সম্পর্কে একটি নতুন প্রশ্ন পোস্ট করতে হবে। ইউনিকোড এবং সিস্টেম কনসোল অগত্যা সেরা সংমিশ্রণ নয়, তবে এ সম্পর্কে আমি যথেষ্ট পরিমাণে জানি না, সুতরাং আপনার যদি একটি নির্দিষ্ট উত্তরের প্রয়োজন হয় তবে এটি সম্পর্কে এসওতে এখানে একটি প্রশ্ন পোস্ট করুন।
লাসে ভি কার্লসেন

2
লিঙ্কটি মারা গেছে। কোড উদাহরণটি উইন্ডোজ কনসোলের জন্য ভুল যেখানে কোডপেজ (ওএম) যেমন cp437উইন্ডোজ এএনএসআই কোডেপেজের থেকে আলাদা cp1252। কোডটি UnicodeEncodeError: 'charmap' codec can't encode characterত্রুটি স্থির করে না এবং এটি মোজিবাকে ডেকে আনতে পারে যেমন, ا©নীরবে প্রতিস্থাপন করা হয় ╪º⌐
jfs

73

আপডেট করুন: পাইথন 3.6 কার্যকরী PEP 528: UTF-8- উইন্ডোজ পরিবর্তন এনকোডিং কনসোল : Windows এ ডিফল্ট কনসোল এখন সব ইউনিকোড অক্ষর গ্রহণ করব। অভ্যন্তরীণভাবে, এটা হিসাবে একই ইউনিকোড API ব্যবহার করে প্যাকেজ নিচে উল্লিখিত । এখনই কাজ করা উচিত।win-unicode-consoleprint(unicode_string)


আমি একটি UnicodeEncodeError: 'charmap' codec can't encode character... ত্রুটি পেয়েছি ।

ত্রুটির অর্থ হ'ল আপনি যে ইউনিকোড অক্ষর মুদ্রণের চেষ্টা করছেন তা বর্তমান ( chcp) কনসোল অক্ষর এনকোডিং ব্যবহার করে উপস্থাপন করা যায় না । কোডপেজটি প্রায়শই 8-বিট এনকোডিং হয় যেমন cp437~ 1 এম ইউনিকোড অক্ষর থেকে কেবলমাত্র ~ 0x100 অক্ষর উপস্থাপন করতে পারে:

>>> আপনি "\ N {ইউরো স্বাক্ষর}" enc এনকোড ('সিপি 437')
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
...
ইউনিকোড এনকোড এরির: 'চারম্যাপ' কোডেক 0 'পজিশনে' character u20ac 'অক্ষরটি এনকোড করতে পারে না:
চরিত্রের মানচিত্র 

আমি ধরে নিলাম এটি কারণ উইন্ডোজ কনসোলটি ইউনিকোড-কেবলমাত্র অক্ষরগুলি গ্রহণ করে না। এর সর্বোত্তম উপায় কি?

উইন্ডোজ কনসোলটি ইউনিকোড অক্ষর গ্রহণ করে এবং সংশ্লিষ্ট ফন্টটি কনফিগার করা থাকলে এটি এমনকি তাদের (বিএমপি) প্রদর্শন করতে পারে । @ দাইরা হপউডের উত্তরেWriteConsoleW() প্রস্তাবিত হিসাবে API ব্যবহার করা উচিত । এটিকে স্বচ্ছভাবে বলা যেতে পারে যেমন, আপনি প্যাকেজ ব্যবহার করেন তবে আপনার স্ক্রিপ্টগুলি পরিবর্তন করার দরকার নেই এবং এটি করা উচিত :win-unicode-console

T:\> py -mpip install win-unicode-console
T:\> py -mrun your_script.py

পাইথন ৩.৪, ইউনিকোড, বিভিন্ন ভাষা এবং উইন্ডোজের সাথে কী চুক্তি হয়েছে দেখুন ?

?এই পরিস্থিতিতে ব্যর্থ হওয়ার পরিবর্তে পাইথনকে স্বয়ংক্রিয়ভাবে মুদ্রণ করার কোনও উপায় আছে কি ?

যদি ?আপনার ক্ষেত্রে সমস্ত অনিবার্যযোগ্য অক্ষরগুলি প্রতিস্থাপন করা যথেষ্ট হয় তবে আপনি PYTHONIOENCODINGএনভ্যাভার সেট করতে পারেন :

T:\> set PYTHONIOENCODING=:replace
T:\> python3 -c "print(u'[\N{EURO SIGN}]')"
[?]

পাইথন ৩.6 PYTHONIOENCODING++ এ এনভ্বর দ্বারা নির্দিষ্ট এনকোডিংটি ইন্টারেক্টিভ কনসোল বাফারদের জন্য উপেক্ষা করা হবে যদি না PYTHONLEGACYWINDOWSIOENCODINGএনভ্বর একটি খালি স্ট্রিং না করে সেট করা থাকে।


3
"উইন্ডোজ ডিফল্ট কনসোল এখন সব ইউনিকোড অক্ষর গ্রহণ করবে" কিন্তু আপনি কনসোল কনফিগার করতে: "Lucida কনসোল" বেছে নিন ফন্ট (cmd কমান্ড বা পাইথন অলস এর) উইন্ডোজ উপরের ডানে ক্লিক করে ডিফল্ট /। (জাপানি এবং চীনারা আমার পক্ষে কাজ করে না তবে আমার তা ছাড়া বাঁচা উচিত ...)
জিনস্নো

2
@ গুইলিউম: উত্তরে উইন্ডোজ কনসোল সম্পর্কে সাহসের সাথে বাক্যাংশ রয়েছে : "যদি সংশ্লিষ্ট ফন্টটি কনফিগার করা থাকে তবে।" এই উত্তরটি অলস উল্লেখ না কিন্তু আপনি তা ফন্টের কনফিগার করার প্রয়োজন হবে না (আমি জাপানি ও চীনা অক্ষর ডিফল্টরূপে নিষ্ক্রিয় মাত্র জরিমানা দেখুন। চেষ্টা করে দেখুন print('\u4E01'), print('\u6b63'))।
jfs

2
@ গুইলাউম আপনি উইন্ডোজ ১০-এ ল্যাঙ্গুয়েজ প্যাকটি ইনস্টল করলেও আপনি চাইনিজ পেতে পারেন এটি এতে চীনা সমর্থন করে এমন কনসোল ফন্ট যুক্ত করেছে।
মার্ক টোলোনেন

28

অন্যান্য প্রশংসনীয়-উত্তোলনকারী উত্তর থাকা সত্ত্বেও কোড পৃষ্ঠাটি 65001 এ পরিবর্তনের পরামর্শ দেয়, এটি কার্যকর হয় না । (এছাড়াও, ডিফল্ট ব্যবহার এনকোডিং পরিবর্তন sys.setdefaultencodingহয় একটি ভাল ধারণা না ।)

কাজ করে এমন বিশদ এবং কোডের জন্য এই প্রশ্নটি দেখুন ।


2
win-unicode-consoleপাইথন প্যাকেজ (আপনার কোডের ভিত্তিতে) আপনার স্ক্রিপ্টটি পরিবর্তন এড়াতে দেয় যদি এটি ইউনিকোড সরাসরি py -mrun your_script.pyকমান্ড ব্যবহার করে প্রিন্ট করে ।
jfs

12

আপনি যদি খারাপ চরিত্রের নির্ভরযোগ্য উপস্থাপনা পেতে আগ্রহী না হন তবে আপনি এরকম কিছু ব্যবহার করতে পারেন (3.x সহ অজগর> = 2.6 নিয়ে কাজ করা):

from __future__ import print_function
import sys

def safeprint(s):
    try:
        print(s)
    except UnicodeEncodeError:
        if sys.version_info >= (3,):
            print(s.encode('utf8').decode(sys.stdout.encoding))
        else:
            print(s.encode('utf8'))

safeprint(u"\N{EM DASH}")

স্ট্রিংয়ের খারাপ অক্ষর (গুলি) একটি উপস্থাপনায় রূপান্তরিত হবে যা উইন্ডোজ কনসোল দ্বারা মুদ্রণযোগ্য।


.encode('utf8').decode(sys.stdout.encoding)u"\N{EM DASH}".encode('utf-8').decode('cp437')ΓÇö
মোজিবাকে

কেবলমাত্র print(s.encode('utf-8'))কম্পাইলার ত্রুটিগুলি এড়ানোর একটি ভাল উপায় হতে পারে। পরিবর্তে, আপনি মুদ্রণযোগ্য অক্ষরের জন্য \ xNN আউটপুট পান যা আমার ডায়াগনস্টিক বার্তাগুলির জন্য যথেষ্ট ছিল।
কোড

4
এটি অত্যন্ত, দর্শনীয়ভাবে ভুল। ইউটিএফ -8 এ এনকোডিং এর পরে 8-বিট চরসেট হিসাবে ডিকোডিং ক) প্রায়শই ব্যর্থ হয়, সমস্ত কোডপ্যাজে 256 বাইট মানগুলির জন্য অক্ষর থাকে না, এবং খ) সর্বদা ডেটার ভুল ব্যাখ্যা করে, পরিবর্তে মোজিবাকে জগাখিচুড়ি তৈরি করে।
মার্টিজন পিটারস

10

নীচের কোডটি পাইথন আউটপুটটিকে উইন্ডোজ এমনকি ইউটিএফ -8 হিসাবে কনসোল করতে সক্ষম করবে।

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

উইন্ডোজে পাইথন ২.6 সহ নীচের কোডটি পরীক্ষা করা হয়েছিল।


#!/usr/bin/python
# -*- coding: UTF-8 -*-

import codecs, sys

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

print sys.getdefaultencoding()

if sys.platform == 'win32':
    try:
        import win32console 
    except:
        print "Python Win32 Extensions module is required.\n You can download it from https://sourceforge.net/projects/pywin32/ (x86 and x64 builds are available)\n"
        exit(-1)
    # win32console implementation  of SetConsoleCP does not return a value
    # CP_UTF8 = 65001
    win32console.SetConsoleCP(65001)
    if (win32console.GetConsoleCP() != 65001):
        raise Exception ("Cannot set console codepage to 65001 (UTF-8)")
    win32console.SetConsoleOutputCP(65001)
    if (win32console.GetConsoleOutputCP() != 65001):
        raise Exception ("Cannot set console output codepage to 65001 (UTF-8)")

#import sys, codecs
sys.stdout = codecs.getwriter('utf8')(sys.stdout)
sys.stderr = codecs.getwriter('utf8')(sys.stderr)

print "This is an Е乂αmp١ȅ testing Unicode support using Arabic, Latin, Cyrillic, Greek, Hebrew and CJK code points.\n"

1
এটিকে কীভাবে আলাদা করার জন্য কোনও আলাদা কনসোল ব্যবহার করার কোনও উপায় আছে?
এন্ডোলিথ

@ সোরিন: আপনি প্রথমে import win32consoleএকটি এর বাইরে কেন tryপরে শর্তসাপেক্ষে এটি এ এর ​​ভিতরে করেন try? সেই ধরণের অর্থহীন নয় (প্রথম import)
0xC0000022L

এটির মূল্যের জন্য, ডেভিড-সারা হপউডের সরবরাহিত একটি কাজ করে (আমি এটি চালাতেও পেলাম না কারণ
উইন 32

4
সিস্টেমের ডিফল্ট এনকোডিংটি পরিবর্তন করবেন না; পরিবর্তে আপনার ইউনিকোড মানগুলি ঠিক করুন। ডিফল্ট এনকোডিং পরিবর্তন করা লাইব্রেরিগুলিকে ভেঙে দিতে পারে যা ডিফল্ট আচরণের উপর নির্ভর করে । এটি করার আগে আপনাকে মডিউল পুনরায় লোড করতে বাধ্য করার একটি কারণ রয়েছে।
মার্টিজন পিটারস

7

পাইথন স্ক্রিপ্ট চালানোর আগে কমান্ড লাইনে এই কোডটি প্রবেশ করুন:

chcp 65001 & set PYTHONIOENCODING=utf-8

5

জিম্পাওলো রোডোলের উত্তরটির মতো, তবে আরও নোংরা: আমি সত্যই সত্যই একটি দীর্ঘ সময় (শীঘ্রই) এনকোডিংয়ের পুরো বিষয়টি বুঝতে এবং কীভাবে উইন্ডোজ কনসোলগুলিতে প্রয়োগ করে তা বোঝার ইচ্ছা করি,

এই মুহুর্তের জন্য আমি কেবল এইচটিজি চেয়েছিলাম যার অর্থ আমার প্রোগ্রামটি ক্রাশ হবে না, এবং যা আমি বুঝতে পেরেছিলাম ... এবং এর মধ্যে খুব বেশি বিদেশী মডিউল আমদানি করা জড়িত ছিল না (বিশেষত আমি জাইথন ​​ব্যবহার করছি, তাই অর্ধবার একটি পাইথন মডিউল পাওয়া যায় না বাস্তবে উপলব্ধ।

def pr(s):
    try:
        print(s)
    except UnicodeEncodeError:
        for c in s:
            try:
                print( c, end='')
            except UnicodeEncodeError:
                print( '?', end='')

এনবি "পিআর" "প্রিন্ট" এর চেয়ে টাইপ করা সংক্ষিপ্ত (এবং "স্যাফপ্রিন্ট" এর চেয়ে টাইপ করতে বেশ খানিকটা ছোট) ...!


চতুর, সমস্যাটি ঘুরে দেখার এক দ্রুত এবং নোংরা উপায়। আমি মনে করি এটি একটি অন্তর্বর্তী সমাধানের জন্য দুর্দান্ত।
জেএফএ

3

পাইথন 2 এর জন্য চেষ্টা করুন:

print unicode(string, 'unicode-escape')

পাইথন 3 এর জন্য চেষ্টা করুন:

import os
string = "002 Could've Would've Should've"
os.system('echo ' + string)

অথবা উইন-ইউনিকোড-কনসোল ব্যবহার করে দেখুন:

pip install win-unicode-console
py -mrun your_script.py

2

টি এল; ডিআর:

print(yourstring.encode('ascii','replace'));

আমি নিজেই এটিতে ছুটে এসে একটি টুইচ চ্যাটে (আইআরসি) বোটে কাজ করছি। (পাইথন ২.7 সর্বশেষ)

আমি প্রতিক্রিয়া জানাতে চ্যাট বার্তাগুলি পার্স করতে চেয়েছিলাম ...

msg = s.recv(1024).decode("utf-8")

তবে এগুলি একটি মানব-পঠনযোগ্য ফর্ম্যাটে কনসোলে নিরাপদে মুদ্রণ করুন:

print(msg.encode('ascii','replace'));

এটি বট নিক্ষেপের UnicodeEncodeError: 'charmap'ত্রুটির বিষয়টি সংশোধন করে এবং ইউনিকোড অক্ষরকে প্রতিস্থাপন করে ?


2

আপনার সমস্যার কারণ নয় উইন কনসোল ইউনিকোড গ্রহণ করতে (এটা এই আছে যেমন যেহেতু আমি ডিফল্টরূপে Win2k অনুমান) ইচ্ছুক না। এটি ডিফল্ট সিস্টেম এনকোডিং। এই কোডটি ব্যবহার করে দেখুন এবং এটি আপনাকে কী দেয় তা দেখুন:

import sys
sys.getdefaultencoding()

যদি এটি ascii বলে, আপনার কারণ আছে ;-) আপনাকে সিট কাস্টমাইজ.পি নামে একটি ফাইল তৈরি করতে হবে এবং পাইথন পাথের নীচে রাখতে হবে (আমি এটি /usr/lib/python2.5/site-packages এর অধীনে রেখেছি, তবে এটির মধ্যে পার্থক্য রয়েছে) উইন - এটি সি: \ পাইথন \ lib \ সাইট-প্যাকেজ বা কিছু), নীচের বিষয়বস্তু সহ:

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

এবং সম্ভবত আপনি নিজের ফাইলগুলিতে এনকোডিংও নির্দিষ্ট করতে চাইতে পারেন:

# -*- coding: UTF-8 -*-
import sys,time

সম্পাদনা করুন: পাইথনের বইটিতে ডাইভটি চমত্কারভাবে আরও তথ্য পাওয়া যাবে


2
setdeafultencoding () sys (মডিউল ডক্স অনুসারে v2.0 অনুযায়ী) দীর্ঘস্থায়ী।
জন কেজ

আমি এখনই এটি প্রমাণ করতে পারি না, তবে আমি জানি যে আমি এই কৌশলটি পরবর্তী সংস্করণে ব্যবহার করেছি - উইন্ডোজে 2.5
বার্তোসড রাদাকিজিস্কি

6
ঠিক আছে, বেশ কিছুক্ষণ পরে আমি জানতে পেরেছি যে: "এই ফাংশনটি কেবলমাত্র সাইট মডিউল প্রয়োগকরণ এবং যেখানে প্রয়োজন হবে সাইটকাস্টমাইজ করে ব্যবহার করার উদ্দেশ্যে। সাইট মডিউল দ্বারা একবার ব্যবহার করা হয়ে গেলে এটি সিএস মডিউলটির নামস্থান থেকে সরানো হয়। "
বার্তোস্জ রাদাকিজিস্কি

4
বাস্তবে আপনি উইন্ডোজ কনসোলটিকে utf-8 এ সেট করতে পারেন। আপনার chcp 65001 বলতে হবে এবং এটি ইউনিকোড হবে।
বার্তোস্জে রাদাচিজিস্কি

4
একে একে পরিষ্কার করার জন্য: ডিফল্ট এনকোডিংটি পরিবর্তন করা খুব খারাপ ধারণা । এটি আপনার ভাঙা পা ছিঁড়ে ফেলার মতো এবং হাঁটার মতো যা হ'ল কিছুই ঠিক হয়নি, বরং ডাক্তারকে হাড় ঠিকঠাক করে দেওয়া set সমস্ত কোড হ্যান্ডলিং ইউনিকোড পাঠ্যটি অন্তর্নিহিত এনকোডিং / ডিকোডিংয়ের উপর নির্ভর করার পরিবর্তে ধারাবাহিকভাবে করা উচিত।
মার্টিজন পিটারস

1

জেএফ সেবাস্তিয়ান এর উত্তর সম্পর্কিত ধরনের, কিন্তু আরও সরাসরি।

কনসোল / টার্মিনালে মুদ্রণের সময় যদি আপনার এই সমস্যা হয়, তবে এটি করুন:

>set PYTHONIOENCODING=UTF-8

3
set PYTHONIOENCODING=UTF-8হয়ে উঠতে পারে মোজিবেক কনসোল যেমন cp437 যেমন একটি ভিন্ন এনকোডিং ব্যবহার করে। cp65001বিভিন্ন সমস্যা আছে । উইন্ডো কনসোলে ইউনিকোড প্রিন্ট করতে, ইউনিকোড এপিআই ব্যবহার করা উচিত ( WriteConsoleW()) আমার উত্তর অনুসারে যেখানে PYTHONIOENCODINGকেবলমাত্র এমন অক্ষর প্রতিস্থাপন করতে ব্যবহৃত হয় যা বর্তমান ওএম কোড পৃষ্ঠাতে ?( WriteConsoleW()এমন অক্ষরের জন্যও কাজ করে) প্রতিনিধিত্ব করতে পারে না । PYTHONIOENCODINGযদি আউটপুট কোনও ফাইলে পুনঃনির্দেশিত হয় তবে এটি ব্যবহার করা যায়।
jfs

1

পাইথন ৩.6 উইন্ডোজ:: পাইথন চালু করার বিভিন্ন উপায় রয়েছে আপনি পাইথন কনসোল (যাতে পাইথন লোগো রয়েছে) বা উইন্ডোজ কনসোল (এটিতে cmd.exe লেখা আছে) ব্যবহার করতে পারেন।

আমি উইন্ডোজ কনসোলে utf8 টি অক্ষর মুদ্রণ করতে পারিনি। Utf-8 অক্ষর মুদ্রণ আমাকে এই ত্রুটি ছুঁড়ে ফেলেছে:

OSError: [winError 87] The paraneter is incorrect 
Exception ignored in: (_io-TextIOwrapper name='(stdout)' mode='w' ' encoding='utf8') 
OSError: [WinError 87] The parameter is incorrect 

উপরের উত্তরটি বোঝার চেষ্টা এবং ব্যর্থ হওয়ার পরে আমি আবিষ্কার করেছি এটি কেবল একটি সেটিংস সমস্যা ছিল। ট্যাবটিতে fontলুসিডা কনসোলটি বেছে নিয়ে সিএমডি কনসোল উইন্ডোগুলির শীর্ষে ডান ক্লিক করুন ।


0

জেমস সুলাক জিজ্ঞাসা করলেন,

পাইথনটি কীভাবে স্বয়ংক্রিয়ভাবে একটি মুদ্রণ করতে পারি? পরিবর্তে এই পরিস্থিতিতে ব্যর্থ হয়?

অন্যান্য সমাধানগুলি প্রস্তাব দেয় আমরা উইন্ডোজ পরিবেশ পরিবর্তন করতে বা পাইথনের প্রতিস্থাপনের চেষ্টা করব print() ফাংশন । নীচের উত্তরটি সুলকের অনুরোধ পূরণের নিকটে আসে।

উইন্ডোজ 7 এর অধীনে পাইথন 3.5 কে একটি নিক্ষেপ না করেই ইউনিকোড প্রিন্ট করা যায় UnicodeEncodeError কে নিম্নরূপ করা যায়:

    এর জায়গায়:     print(text)
    বিকল্প:     print(str(text).encode('utf-8'))

ব্যতিক্রম ছুঁড়ার পরিবর্তে পাইথন এখন অপ্রিন্টযোগ্য ইউনিকোড অক্ষরগুলিকে \ xNN হেক্স কোড হিসাবে প্রদর্শন করে , যেমন:

  হালমালো n \ xe2 \ x80 \ x99 \ xc3 \ xa9tait প্লাস qu \ xe2 \ x80 \ x99un পয়েন্ট নোয়ার

পরিবর্তে

  হালমালো n'était প্লাস qu'un পয়েন্ট নয়ার

মঞ্জুর, পরেরটি পছন্দসই সেলেরিস পারিবাস , তবে অন্যথায় প্রাক্তনটি ডায়াগনস্টিক বার্তার জন্য সম্পূর্ণ নির্ভুল accurate এটি ইউনিকোডকে আক্ষরিক বাইট মান হিসাবে প্রদর্শন করে কারণ পূর্ববর্তীটি এনকোড / ডিকোড সমস্যাগুলি নির্ণয় করতে সহায়তা করতে পারে।

নোট:str() কল উপরে প্রয়োজন হয় কারণ অন্যথায় encode()পাইথন সংখ্যার একটি tuple হিসাবে একটি ইউনিকোড অক্ষর প্রত্যাখ্যান করার কারণ।

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