पायथन में utf-8 के लिए एक स्ट्रिंग कैसे परिवर्तित करें


193

मेरे पास एक ब्राउज़र है जो मेरे पायथन सर्वर के लिए utf-8 अक्षर भेजता है, लेकिन जब मैं इसे क्वेरी स्ट्रिंग से पुनर्प्राप्त करता हूं, तो एन्कोडिंग जो पायथन रिटर्न ASCII है। मैं सादे स्ट्रिंग को utf-8 में कैसे बदल सकता हूं?

नोट: वेब से पारित स्ट्रिंग पहले से ही UTF-8 एन्कोडेड है, मैं बस इसे UTF-8 नहीं ASCII के रूप में व्यवहार करने के लिए अजगर बनाना चाहता हूं।


इस लिंक को
आजमाइए

मुझे लगता है कि एक बेहतर शीर्षक यह होगा कि अनुवाद के बिना यूनिकोड के लिए एक स्ट्रिंग का
बोटकोडर

1
2018 में, अजगर 3 अगर आपको आस्की डिकोड एरर मिलता है"some_string".encode('utf-8').decode('utf-8')
devssh

जवाबों:


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")

^ यूनिकोड में कनवर्ट करना और एन्कोडिंग को निर्दिष्ट करना।


34
, मुझे निम्नलिखित त्रुटि मिल रही है: UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byteयह मेरा कोड है: csvReader में लाइन के लिए = =]] पर लाइन में एल्म के लिए: = यूनिकोडेस्ट्र = यूनिकोड (एल्म, 'utf-8': cline.append (यूनिकोडेस्टर) के लिए .एपेंड (क्लाइन)
एनजी

104
यह कोई भी पायथन 3 में लागू नहीं होता है, सभी तार यूनिकोड हैं और unicode()मौजूद नहीं हैं।
नूमेन

यह टक्कर की तरह है, लेकिन धन्यवाद। यह एक मुद्दा है जहाँ मैं यूनिकोड मुद्रित करने का प्रयास कर रहा था और Is प्राप्त कर रहा था।
53

आप uएक strप्रारूप में वापस कैसे कन्वर्ट ( uवापस कन्वर्ट s)?
तुंगुई

3
यह कोड केवल तब तक काम करेगा जब तक कि पाठ में गैर-असि अक्षर न हों; स्ट्रिंग पर एक सरल उच्चारण चरित्र इसे विफल कर देगा।
Haroldo_OK

71

अगर ऊपर दिए गए तरीके काम नहीं करते हैं, तो आप पायथन को एक स्ट्रिंग के कुछ हिस्सों को अनदेखा करने के लिए भी कह सकते हैं जो इसे utf-8 में नहीं बदल सकते:

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

6
समझे गुण: 'str' ऑब्जेक्ट में कोई विशेषता 'डीकोड' नहीं है
sran3h

2
@ saran3h ऐसा लगता है कि आप पायथन 3 का उपयोग कर रहे हैं, जिस स्थिति में पायथन को आपके लिए एन्कोडिंग मुद्दों को संभालना चाहिए । क्या आपने एन्कोडिंग निर्दिष्ट किए बिना अपने दस्तावेज़ को पढ़ने की कोशिश की है?
दुहाई

डिफ़ॉल्ट रूप से सिस्टम एन्कोडिंग द्वारा पायथन। विंडोज़ 10 में यह cp1252 है जो utf-8 से अलग है। मैं इस पर कुछ घंटे बर्बाद कर दिया, जबकि 3.8 3.8 में codecs.open () का उपयोग करते हुए
विशेश मंगला

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मुझे गैर- एससीआई पात्रों के साथ स्ट्रिंग को utf-8 में बदलने में कैसे मदद करेगा ?
ओरताल तुर्गमैन 17

@OrtalTurgeman मैं इस सवाल का जवाब नहीं दे रहा हूं। देखिए, यह एक टिप्पणी है, उत्तर नहीं। मेरी टिप्पणी उत्तर में कोड के साथ समस्या को संबोधित करती है। यह पायथन 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

पायथन 3.6 में, उनके पास एक अंतर्निहित यूनिकोड () विधि नहीं है। स्ट्रिंग को पहले से ही डिफ़ॉल्ट रूप से यूनिकोड के रूप में संग्रहीत किया जाता है और रूपांतरण की आवश्यकता नहीं होती है। उदाहरण:

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

3

Ord () और unichar () के साथ अनुवाद करें। हर यूनिकोड चार में एक संख्या होती है, जैसे एक सूचकांक। इसलिए पायथन के पास चार और उसकी संख्या के बीच अनुवाद करने की कुछ विधियाँ हैं। नीचे एक ñ उदाहरण है। आशा है कि यह मदद कर सकता है।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.