পাইথনে স্ট্রিংটিকে utf-8 এ কীভাবে রূপান্তর করা যায়


193

আমার একটি ব্রাউজার রয়েছে যা আমার পাইথন সার্ভারে utf-8 অক্ষর প্রেরণ করে তবে আমি যখন এটিটি ক্যোয়ারী স্ট্রিং থেকে পুনরুদ্ধার করি তখন পাইথন যে এনকোডিং দেয় তা ASCII হয়। আমি কীভাবে প্লেইন স্ট্রিংটিকে utf-8 এ রূপান্তর করতে পারি?

দ্রষ্টব্য: ওয়েব থেকে প্রাপ্ত স্ট্রিংটি ইতিমধ্যে ইউটিএফ -8 এনকোডড রয়েছে, আমি পাইথনকে এটিটিকে ASCII নয় বরং ইউটিএফ -8 হিসাবে বিবেচনা করতে চাই।


এই লিঙ্কটি ব্যবহার করে দেখুন http://evanjones.ca/python-utf8.html
মুদাসসির

আমি মনে করি একটি ভাল শিরোনাম হ'ল অনুবাদ ছাড়া ইউনিকোডে স্ট্রিংকে কীভাবে বাধ্য করা যায়?
বোটকোডার

1
2018 সালে, অজগর 3 আপনি যদি "some_string".encode('utf-8').decode('utf-8')
এসকিআই

উত্তর:


266
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ এটি একটি বাইট স্ট্রিং (প্লেইন_স্ট্রিং) এবং একটি ইউনিকোড স্ট্রিংয়ের মধ্যে পার্থক্য।

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

Un ইউনিকোডে রূপান্তর করা এবং এনকোডিং নির্দিষ্ট করা।


34
, আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি: UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byteএটি আমার কোড: retv [[] csvReader এর লাইনের জন্য: cline = [] এলমের জন্য লাইনে: unicodestr = ইউনিকোড (এলম, 'utf-8') cline.append (unicodestr) ret .append (cline)
গোপাকুমার এনজি

103
পাইথন 3 এ এর ​​কোনওটিই প্রযোজ্য নয়, সমস্ত স্ট্রিং ইউনিকোড এবং unicode()বিদ্যমান নেই।
নুমেনন

এটিকে ধাক্কা দেওয়ার মতো, তবে ধন্যবাদ। এটি এমন একটি সমস্যার সমাধান করেছে যেখানে আমি ইউনিকোড মুদ্রণের চেষ্টা করছিলাম এবং s পাচ্ছিলাম।
5 的 人

আপনি কীভাবে ফর্ম্যাটতে uফিরে রূপান্তর করতে পারেন str( uফিরে রূপান্তর করতে s)?
টাঙ্গুয়

3
এই কোডটি কেবল ততক্ষণ কাজ করবে যতক্ষণ পাঠ্যে অ-এসকিআই অক্ষর থাকবে না; স্ট্রিংয়ের উপর একটি সরল উচ্চারণযুক্ত অক্ষর এটি ব্যর্থ করে দেবে।
হ্যারল্ডো_ওক

71

যদি উপরের পদ্ধতিগুলি কাজ না করে, আপনি পাইথনকে স্ট্রিংয়ের কিছু অংশ উপেক্ষা করতেও বলতে পারেন যা এটি utf-8 তে রূপান্তর করতে পারে না:

stringnamehere.decode('utf-8', 'ignore')

6
অ্যাট্রিবিউটআরার পেয়েছি: 'স্ট্র' অবজেক্টটির কোনও 'ডিকোড' নেই
saran3h

2
@ saran3h দেখে মনে হচ্ছে আপনি পাইথন 3 ব্যবহার করছেন, সেই ক্ষেত্রে পাইথন আপনার জন্য এনকোডিংয়ের বিষয়গুলি পরিচালনা করবে handle আপনি কি কোনও এনকোডিং নির্দিষ্ট না করে আপনার দস্তাবেজটি পড়ার চেষ্টা করেছেন?
দুহাইম

পাইথন ডিফল্ট পিক্স সিস্টেম এনকোডিং। উইন্ডোজ 10 এ এটি সিপি 1252 যা utf-8 থেকে পৃথক। ৩.৮
বিশেশ মঙ্গলা

21

কিছুটা ওভারকিল হতে পারে তবে আমি যখন একই ফাইলগুলিতে এসকিআই এবং ইউনিকোড নিয়ে কাজ করি তখন ডিকোড পুনরাবৃত্তি করা ব্যথা হতে পারে, এটি আমি ব্যবহার করি:

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
    return input

15

আপনার .py ফাইলের শীর্ষে নিম্নলিখিত লাইনটি যুক্ত করা:

# -*- coding: utf-8 -*-

আপনাকে সরাসরি আপনার স্ক্রিপ্টে স্ট্রিংগুলি এনকোড করতে দেয়:

utfstr = "ボールト"

1
ওপি যা চায় তা নয়। তবে যাইহোক এই জাতীয় স্ট্রিং লিটারেলগুলি এড়িয়ে চলুন। এটি পাইথন 3 (ভাল) এ ইউনিকোড স্ট্রিং তৈরি করে তবে এটি পাইথন 2 (খারাপ) এর বাইটারস্ট্রিং। হয় from __future__ import unicode_literalsশীর্ষে যুক্ত করুন বা u''উপসর্গ ব্যবহার করুন । অক্ষরে অক্ষরে অক্ষর ব্যবহার করবেন না bytes। Utf-8 বাইট পেতে, utf8bytes = unicode_text.encode('utf-8')এটি পরে প্রয়োজন পরে করতে পারেন।
jfs

1
@jfs কীভাবে from __future__ import unicode_literalsআমাকে অ্যাস্কি অক্ষরের সাথে স্ট্রিংটি ইউটিএফ -8 এ রূপান্তর করতে সহায়তা করবে ?
অর্টাল টারজম্যান

@ অর্টাল টার্জম্যান আমি প্রশ্নের উত্তর দিচ্ছি না। দেখুন, এটি একটি মন্তব্য নয়, উত্তর নয়। আমার মন্তব্য উত্তরে কোড সহ সমস্যাটি সম্বোধন করে। এটি পাইথন 2 এ অ্যাস্কি অক্ষর সহ একটি বাইট্রিং তৈরি করার চেষ্টা করে (এটি পাইথন 3-এর একটি সিনট্যাক্স এরর - বাইটস আক্ষরিক তা নিষিদ্ধ করে)।
jfs

13

যদি আমি আপনাকে সঠিকভাবে বুঝতে পারি তবে আপনার কোডটিতে একটি utf-8 এনকোডড বাইট-স্ট্রিং রয়েছে।

বাইট-স্ট্রিংকে ইউনিকোড স্ট্রিংয়ে রূপান্তর করা ডিকোডিং (ইউনিকোড -> বাইট-স্ট্রিং এনকোডিং হয়) হিসাবে পরিচিত।

আপনি এটি ইউনিকোড ফাংশন বা ডিকোড পদ্ধতি ব্যবহার করে করেন । উভয় ক্ষেত্রেই:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

বা:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")


8

পাইথন ৩.6-এ, তাদের কোনও বিল্ট-ইন ইউনিকোড () পদ্ধতি নেই। স্ট্রিংগুলি ইতোমধ্যে ডিফল্টরূপে ইউনিকোড হিসাবে সঞ্চিত রয়েছে এবং কোনও রূপান্তর প্রয়োজন নেই। উদাহরণ:

my_str = "\u221a25"
print(my_str)
>>> 25

3

অর্ড () এবং ইউনিকার () এর সাথে অনুবাদ করুন। প্রতিটি ইউনিকোড চরের একটি সংখ্যক অ্যাসোসিয়েটেড থাকে, যা সূচকের মতো কিছু। সুতরাং পাইথনের একটি চর এবং তার সংখ্যার মধ্যে অনুবাদ করার কয়েকটি পদ্ধতি রয়েছে। ডাউনসাইড একটি উদাহরণ। আশা করি এটি সাহায্য করতে পারে।

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ

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