यूथोड (UTF-8) पायथन में फाइलों को पढ़ना और लिखना


329

मुझे पढ़ने और पाठ को एक फ़ाइल (पायथन 2.4) को लिखने में समझने में कुछ मस्तिष्क की विफलता हो रही है।

# The string, which has an a-acute in it.
ss = u'Capit\xe1n'
ss8 = ss.encode('utf8')
repr(ss), repr(ss8)

("u'Capit \ xe1n '", "' Capit \ xc3 \ xa1n '")

print ss, ss8
print >> open('f1','w'), ss8

>>> file('f1').read()
'Capit\xc3\xa1n\n'

इसलिए मैं Capit\xc3\xa1nअपने पसंदीदा संपादक को फ़ाइल f2 में टाइप करता हूं।

फिर:

>>> open('f1').read()
'Capit\xc3\xa1n\n'
>>> open('f2').read()
'Capit\\xc3\\xa1n\n'
>>> open('f1').read().decode('utf8')
u'Capit\xe1n\n'
>>> open('f2').read().decode('utf8')
u'Capit\\xc3\\xa1n\n'

मैं यहाँ क्या नहीं समझ रहा हूँ? स्पष्ट रूप से कुछ महत्वपूर्ण सा जादू (या अच्छी भावना) है जो मुझे याद आ रही है। उचित रूपांतरण प्राप्त करने के लिए पाठ फ़ाइलों में एक प्रकार क्या है?

मैं वास्तव में यहाँ ग्रॉस करने में विफल रहा हूँ, यूटीएफ -8 प्रतिनिधित्व का क्या मतलब है, अगर आप वास्तव में इसे पहचानने के लिए पायथन नहीं प्राप्त कर सकते हैं, जब यह बाहर से आता है। शायद मुझे सिर्फ JSON स्ट्रिंग को डंप करना चाहिए, और इसके बजाय इसका उपयोग करना चाहिए, क्योंकि इसके पास एक अतुलनीय प्रतिनिधित्व है! इस बिंदु पर अधिक है, क्या इस यूनिकोड ऑब्जेक्ट का ASCII प्रतिनिधित्व है जिसे पायथन पहचान और डिकोड करेगा, जब एक फ़ाइल से आ रहा है? यदि हां, तो मुझे यह कैसे मिलेगा?

>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'

जवाबों:


110

अंकन में

u'Capit\xe1n\n'

"\ xe1" केवल एक बाइट का प्रतिनिधित्व करता है। "x" आपको बताता है कि "e1" हेक्साडेसिमल में है। जब आप लिखते हैं

Capit\xc3\xa1n

आपकी फ़ाइल में आपके पास "\ xc3" है। वे 4 बाइट्स हैं और आपके कोड में आप उन सभी को पढ़ते हैं। जब आप उन्हें प्रदर्शित करते हैं तो आप यह देख सकते हैं:

>>> open('f2').read()
'Capit\\xc3\\xa1n\n'

आप देख सकते हैं कि बैकस्लैश एक बैकस्लैश द्वारा बच गया है। तो आपके पास अपनी स्ट्रिंग में चार बाइट्स हैं: "\", "x", "c" और "3"।

संपादित करें:

जैसा कि अन्य लोगों ने अपने उत्तर में कहा है कि आपको बस संपादक में पात्रों को दर्ज करना चाहिए और आपके संपादक को तब UTF-8 में रूपांतरण को संभालना चाहिए और इसे सहेजना चाहिए।

यदि आपके पास वास्तव में इस प्रारूप में एक स्ट्रिंग है तो आप string_escapeइसे सामान्य स्ट्रिंग में डिकोड करने के लिए कोडेक का उपयोग कर सकते हैं :

In [15]: print 'Capit\\xc3\\xa1n\n'.decode('string_escape')
Capitán

परिणाम एक स्ट्रिंग है जो UTF-8 में एन्कोडेड है जहां उच्चारण अक्षर दो बाइट्स द्वारा दर्शाया गया \\xc3\\xa1है जो मूल स्ट्रिंग में लिखे गए थे । यदि आप एक यूनिकोड स्ट्रिंग रखना चाहते हैं तो आपको UTF-8 के साथ फिर से डिकोड करना होगा।

आपके संपादन के लिए: आपके पास अपनी फ़ाइल में UTF-8 नहीं है। वास्तव में यह देखने के लिए कि यह कैसा दिखेगा:

s = u'Capit\xe1n\n'
sutf8 = s.encode('UTF-8')
open('utf-8.out', 'w').write(sutf8)

फ़ाइल की सामग्री की तुलना उस फ़ाइल utf-8.outकी सामग्री से करें जिसे आपने अपने संपादक के साथ सहेजा है।


तो, utf-8 एन्कोडेड प्रारूप का क्या मतलब है अगर अजगर इसका उपयोग करते हुए फाइलों में पढ़ सकता है? दूसरे शब्दों में, क्या कोई एसेसी प्रतिनिधित्व है जो अजगर 1 बाइट के रूप में \ xc3 में पढ़ेगा?
ग्रीग लिंड

4
आपके "तो, क्या बात है ..." का उत्तर "मु" है। (चूंकि पाइथन UTF-8 में एन्कोडेड फाइलें पढ़ सकते हैं)। आपके दूसरे प्रश्न के लिए: \ xc3 ASCII सेट का हिस्सा नहीं है। शायद आपका मतलब "8-बिट एन्कोडिंग" के बजाय है। आप यूनिकोड और एनकोडिंग के बारे में भ्रमित हैं; यह ठीक है, कई हैं।
tzot

8
इसे प्राइमर के रूप में पढ़ने की कोशिश करें: joelonsoftware.com/articles/Unicode.html
tzot

नोट: u'\xe1'एक यूनिकोड कोडपॉइंट है U+00e1जिसे चरित्र एन्कोडिंग के आधार पर 1 या अधिक बाइट्स का उपयोग करके दिखाया जा सकता है (यह utf-8 में 2 बाइट्स है)। b'\xe1'एक बाइट (एक संख्या 225), यदि कोई हो क्या पत्र में यह प्रतिनिधित्व कर सकते हैं चरित्र पर निर्भर करता है यह डिकोड करने के लिए जैसे प्रयुक्त एन्कोडिंग है, यह है б( U+0431) CP1251 में, с( U+0441) cp866 में, आदि
JFS

11
यह आश्चर्यजनक है कि कितने ब्रिटिश कोडर्स कहते हैं कि "बस आस्की का उपयोग करें" और फिर यह महसूस करने में विफल रहें कि पाउंड साइन यह नहीं है। अधिकांश को यह जानकारी नहीं है कि ascii! = स्थानीय कोड पेज (यानी लैटिन 1)।
डैनी स्टेपल

712

सांकेतिक शब्दों में बदलना और डिकोड तरीकों के साथ गड़बड़ करने के बजाय मुझे फ़ाइल खोलते समय एन्कोडिंग निर्दिष्ट करना आसान लगता है। ioमॉड्यूल (अजगर 2.6 में जोड़ा) एक प्रदान करता है io.openसमारोह है, जो एक एन्कोडिंग पैरामीटर है।

ioमॉड्यूल से खुली विधि का उपयोग करें ।

>>>import io
>>>f = io.open("test", mode="r", encoding="utf-8")

फिर f के रीड () फ़ंक्शन को कॉल करने के बाद, एक एन्कोडेड यूनिकोड ऑब्जेक्ट वापस कर दिया जाता है।

>>>f.read()
u'Capit\xe1l\n\n'

ध्यान दें कि पायथन 3 में, io.openफ़ंक्शन अंतर्निहित फ़ंक्शन के लिए एक उपनाम है open। अंतर्निहित खुला फ़ंक्शन केवल पायथन 3 में एन्कोडिंग तर्क का समर्थन करता है, न कि पायथन 2।

संपादित करें: पहले इस उत्तर ने कोडेक्स मॉड्यूल की सिफारिश की थी । कोडेक मॉड्यूल समस्याएं पैदा कर सकता मिश्रण जब read()औरreadline() , इसलिए इस सवाल का जवाब अब सिफारिश की गई है कब बजाय मॉड्यूल।

कोडेक्स मॉड्यूल से खुली विधि का उपयोग करें।

>>>import codecs
>>>f = codecs.open("test", "r", "utf-8")

फिर f के रीड () फ़ंक्शन को कॉल करने के बाद, एक एन्कोडेड यूनिकोड ऑब्जेक्ट वापस कर दिया जाता है।

>>>f.read()
u'Capit\xe1l\n\n'

यदि आप किसी फ़ाइल के एन्कोडिंग को जानते हैं, तो कोडेक्स पैकेज का उपयोग करना बहुत कम भ्रमित करने वाला है।

Http://docs.python.org/library/codecs.html#codecs.open देखें


74
के बजाय फाइलों भी लिखने के लिए पूरी तरह से काम करता है, open(file,'w')है codecs.open(file,'w','utf-8')हल
मैट कोनोली

1
यह वह उत्तर है जिसकी मुझे तलाश थी :)
जस्टिन

6
क्या codecs.open(...)विधि पूरी तरह से with open(...):शैली के अनुरूप है , जहां withसभी के बाद फाइल को बंद करने की परवाह है? यह वैसे भी काम करने लगता है।
कोशिश-कैच-अंत

2
@ कोशिश-पकड़-आखिर हां। मैं with codecs.open(...) as f:हर समय उपयोग करता हूं ।
टिम स्वस्त जूल 8'13

6
काश, मैं इसे सौ गुना बढ़ा सकता। कई दिनों तक मिश्रित डेटा के कारण एन्कोडिंग मुद्दों पर कई दिनों तक आंदोलन करने और एन्कोडिंग के बारे में क्रॉस-आईड रीडिंग पढ़ने के बाद, यह जवाब रेगिस्तान में पानी की तरह है। काश मैं इसे जल्द ही देख लेता।
माइक गिरार्ड

45

अब आपको Python3 की आवश्यकता है open(Filename, 'r', encoding='utf-8')

[अनुरोधित स्पष्टीकरण के लिए 2016-02-10 को संपादित करें]

Python3 ने एन्कोडिंग पैरामीटर को अपने खुले फ़ंक्शन में जोड़ा । खुले कार्य के बारे में निम्नलिखित जानकारी यहाँ से एकत्र की गई है: https://docs.python.org/3/library/functions.html##en

open(file, mode='r', buffering=-1, 
      encoding=None, errors=None, newline=None, 
      closefd=True, opener=None)

एन्कोडिंग फ़ाइल को डीकोड या एनकोड करने के लिए उपयोग किए जाने वाले एन्कोडिंग का नाम है। यह केवल पाठ मोड में उपयोग किया जाना चाहिए। डिफ़ॉल्ट एन्कोडिंग प्लेटफ़ॉर्म डिपेंडेंट है (जो भी locale.getpreferredencoding () रिटर्न) है, लेकिन पायथन द्वारा समर्थित किसी भी टेक्स्ट एन्कोडिंग का उपयोग किया जा सकता है। समर्थित एन्कोडिंग की सूची के लिए कोडेक्स मॉड्यूल देखें ।

तो encoding='utf-8'खुले फ़ंक्शन के पैरामीटर के रूप में जोड़कर , फ़ाइल पढ़ना और लिखना सभी utf8 के रूप में किया जाता है (जो कि अब पायथन में किए गए सभी चीज़ों का डिफ़ॉल्ट एन्कोडिंग भी है।)


क्या आप प्रदान किए गए समाधान के बारे में थोड़ा और विवरण जोड़कर अपने जवाब को विस्तृत कर सकते हैं?
अबारिसोन

2
ऐसा लगता है कि यह कोडेक्स मॉड्यूल का उपयोग करते हुए अजगर 2 में उपलब्ध है - codecs.open('somefile', encoding='utf-8') stackoverflow.com/a/147756/149428
1:13 पर टेलर एड्मिस्टन

18

इसलिए, मैंने जो खोजा है, उसके लिए मैंने एक हल ढूंढ लिया है, जो है:

print open('f2').read().decode('string-escape').decode("utf-8")

कुछ असामान्य कोडेक्स हैं जो यहां उपयोगी हैं। यह विशेष रूप से पढ़ने से एक पाइथन के भीतर से UTF-8 अभ्यावेदन लेने की अनुमति देता है, उन्हें एक ASCII फ़ाइल में कॉपी करें और उन्हें यूनिकोड में पढ़ा जाए। "स्ट्रिंग-एस्केप" डिकोड के तहत, स्लैश को दोगुना नहीं किया जाएगा।

यह उस दौर की यात्रा के लिए अनुमति देता है जिसकी मैं कल्पना कर रहा था।


1
अच्छी प्रतिक्रिया, मुझे दोनों समाधानों का परीक्षण किया गया है (codecs.open(file,"r","utf-8")और बस open(file,"r").read().decode("utf-8")और दोनों ने पूरी तरह से काम किया है।
ईगल

मुझे एक "TypeError: अपेक्षित str, बाइट्स या os.PathLike ऑब्जेक्ट मिल रहा है, न कि _io.TextIOWrapper" कोई विचार क्यों?
जिनसो

मुझे लगता है कि अपवोट की संख्या को देखते हुए, दूसरे उत्तर को स्वीकार करना एक शानदार विचार होगा :)
जैक्कोट

14
# -*- encoding: utf-8 -*-

# converting a unknown formatting file in utf-8

import codecs
import commands

file_location = "jumper.sub"
file_encoding = commands.getoutput('file -b --mime-encoding %s' % file_location)

file_stream = codecs.open(file_location, 'r', file_encoding)
file_output = codecs.open(file_location+"b", 'w', 'utf-8')

for l in file_stream:
    file_output.write(l)

file_stream.close()
file_output.close()

14

वास्तव में, इसने मेरे लिए Python 3.2 में UTF-8 एन्कोडिंग के साथ एक फाइल पढ़ने के लिए काम किया:

import codecs
f = codecs.open('file_name.txt', 'r', 'UTF-8')
for line in f:
    print(line)

6

एक यूनिकोड स्ट्रिंग में पढ़ने के लिए और फिर HTML को भेजें, मैंने यह किया:

fileline.decode("utf-8").encode('ascii', 'xmlcharrefreplace')

अजगर संचालित http सर्वर के लिए उपयोगी है।


6

आपने एन्कोडिंग के साथ सामान्य समस्या पर ठोकर खाई है: मैं कैसे बता सकता हूं कि फ़ाइल को किस एन्कोडिंग में है?

उत्तर: आप तब तक नहीं कर सकते जब तक कि फ़ाइल प्रारूप इसके लिए उपलब्ध न कराए । XML, उदाहरण के लिए, के साथ शुरू होता है:

<?xml encoding="utf-8"?>

इस हेडर को सावधानीपूर्वक चुना गया था ताकि इसे एन्कोडिंग के बिना पढ़ा जा सके। आपके मामले में, ऐसा कोई संकेत नहीं है, इसलिए न तो आपके संपादक और न ही पायथन को कुछ पता नहीं है कि क्या चल रहा है। इसलिए, आपको codecsमॉड्यूल का उपयोग करना चाहिए और उपयोग करना चाहिए codecs.open(path,mode,encoding)जो पायथन में लापता बिट प्रदान करता है।

अपने संपादक के लिए, आपको यह देखना होगा कि क्या यह किसी फ़ाइल के एन्कोडिंग को सेट करने का कोई तरीका प्रदान करता है।

UTF-8 का बिंदु 8-बिट डेटा स्ट्रीम के रूप में 21-बिट वर्णों (यूनिकोड) को एन्कोड करने में सक्षम होना है (क्योंकि दुनिया में सभी कंप्यूटरों को केवल एक ही चीज़ हैंडल कर सकती है)। लेकिन चूंकि अधिकांश ओएस यूनिकोड युग से पहले हैं, इसलिए उनके पास हार्ड डिस्क पर फ़ाइलों को एन्कोडिंग जानकारी संलग्न करने के लिए उपयुक्त उपकरण नहीं हैं।

अगला मुद्दा पायथन में प्रतिनिधित्व है। यह पूरी तरह से heikogerlach द्वारा टिप्पणी में समझाया गया है । आपको यह समझना चाहिए कि आपका कंसोल केवल ASCII प्रदर्शित कर सकता है। यूनिकोड या कुछ भी दिखाने के लिए> = चारकोल 128, इसमें भागने के कुछ साधनों का उपयोग करना चाहिए। अपने संपादक में, आपको बची हुई डिस्प्ले स्ट्रिंग टाइप नहीं करनी चाहिए लेकिन स्ट्रिंग का क्या अर्थ है (इस मामले में, आपको umlaut दर्ज करना होगा और फ़ाइल को सहेजना होगा)।

उस ने कहा, आप एक बची हुई स्ट्रिंग को स्ट्रिंग में बदलने के लिए पायथन फंक्शन इवल () का उपयोग कर सकते हैं:

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1

जैसा कि आप देख सकते हैं, स्ट्रिंग "\ xc3" को एकल वर्ण में बदल दिया गया है। यह अब 8-बिट स्ट्रिंग, UTF-8 एन्कोडेड है। यूनिकोड प्राप्त करने के लिए:

>>> x.decode('utf-8')
u'Capit\xe1n\n'

ग्रेग लिंड ने पूछा: मुझे लगता है कि यहां कुछ टुकड़े गायब हैं: फ़ाइल f2 में शामिल हैं: हेक्स:

0000000: 4361 7069 745c 7863 335c 7861 316e  Capit\xc3\xa1n

codecs.open('f2','rb', 'utf-8'), उदाहरण के लिए, उन सभी को एक अलग चार्ट (अपेक्षित) में पढ़ता है क्या एएससीआईआई में एक फाइल पर लिखने का कोई तरीका है जो काम करेगा?

उत्तर: इसका मतलब आप पर निर्भर करता है। ASCII वर्णों का प्रतिनिधित्व नहीं कर सकता> 127. तो आपको यह कहने के लिए किसी तरह की आवश्यकता है "अगले कुछ वर्णों का मतलब कुछ विशेष है" जो कि अनुक्रम "\ x" करता है। यह कहता है: अगले दो वर्ण एकल वर्ण के कोड हैं। "यू" यूनिकोड को 0xFFFF (65535) तक एनकोड करने के लिए चार वर्णों का उपयोग करता है।

इसलिए आप सीधे यूनिकोड को ASCII में नहीं लिख सकते हैं (क्योंकि ASCII में समान अक्षर नहीं हैं)। आप इसे स्ट्रिंग एस्केप (एफ 2 में) के रूप में लिख सकते हैं; इस स्थिति में, फ़ाइल को ASCII के रूप में दर्शाया जा सकता है। या आप इसे UTF-8 के रूप में लिख सकते हैं, इस स्थिति में, आपको 8-बिट सुरक्षित स्ट्रीम की आवश्यकता है।

आपके द्वारा उपयोग किया गया समाधान decode('string-escape')काम करता है, लेकिन आपको पता होना चाहिए कि आप कितनी मेमोरी का उपयोग करते हैं: उपयोग करने की मात्रा का तीन गुना codecs.open()

याद रखें कि एक फाइल सिर्फ 8 बिट्स के साथ बाइट्स का एक क्रम है। न तो बिट्स और न ही बाइट्स का कोई अर्थ है। यह आप हैं जो कहते हैं "65 का अर्थ है 'ए'"। चूंकि \xc3\xa1"आ" बन जाना चाहिए लेकिन कंप्यूटर के पास जानने का कोई साधन नहीं है, आपको इसे एन्कोडिंग को निर्दिष्ट करके बताना होगा जो फ़ाइल लिखते समय उपयोग किया गया था।


मुझे लगता है कि यहां कुछ टुकड़े गायब हैं: फ़ाइल f2 में शामिल हैं: hex: 0000000: 4361 7069 745c 7863 335c 7861 316e 0a Capit \ xc3 \ xa1n। codecs.open ('f2', 'rb', 'utf-8'), उदाहरण के लिए, उन सभी को एक अलग वर्ण (अपेक्षित) में पढ़ता है क्या ऐसी किसी फ़ाइल में लिखने के लिए कोई तरीका नहीं है जो एएससीआई में काम करेगा?
ग्रीग लिंड

6

इसके अलावा codecs.open(), कोई भी io.open()यूनिकोड फ़ाइल पढ़ने / लिखने के लिए Python2 या Python3 के साथ काम कर सकता है

उदाहरण

import io

text = u'á'
encoding = 'utf8'

with io.open('data.txt', 'w', encoding=encoding, newline='\n') as fout:
    fout.write(text)

with io.open('data.txt', 'r', encoding=encoding, newline='\n') as fin:
    text2 = fin.read()

assert text == text2


हां, io का उपयोग करना बेहतर है; लेकिन मैंने इस तरह के बयान के साथ लिखा with io.open('data.txt', 'w', 'utf-8') as file:और एक त्रुटि मिली TypeError: an integer is required:। बाद में मैंने with io.open('data.txt', 'w', encoding='utf-8') as file:इसे बदल दिया और इसने काम किया।
इवान हू

5

ठीक है, आपके पसंदीदा पाठ संपादक को यह एहसास नहीं होता है कि \xc3\xa1उसे चरित्र शाब्दिक माना जाता है, लेकिन यह उन्हें पाठ के रूप में व्याख्या करता है। इसलिए आपको अंतिम पंक्ति में डबल बैकस्लैश मिलते हैं - यह अब xc3आपकी फ़ाइल में वास्तविक बैकस्लैश + इत्यादि है।

यदि आप पायथन में एन्कोडेड फ़ाइलों को पढ़ना और लिखना चाहते हैं, तो कोडेक्स मॉड्यूल का सबसे अच्छा उपयोग करें ।

टर्मिनल और एप्लिकेशन के बीच टेक्स्ट को पेस्ट करना मुश्किल है, क्योंकि आप नहीं जानते कि कौन सा प्रोग्राम किस एन्कोडिंग का उपयोग करके आपके टेक्स्ट की व्याख्या करेगा। आप निम्नलिखित की कोशिश कर सकते हैं:

>>> s = file("f1").read()
>>> print unicode(s, "Latin-1")
Capitán

फिर इस स्ट्रिंग को अपने संपादक में पेस्ट करें और सुनिश्चित करें कि यह लैटिन -1 का उपयोग करके इसे संग्रहीत करता है। इस धारणा के तहत कि क्लिपबोर्ड स्ट्रिंग को गार्बल नहीं करता है, राउंड ट्रिप को काम करना चाहिए।


4

\ X .. अनुक्रम कुछ ऐसा है जो पायथन के लिए विशिष्ट है। यह एक सार्वभौमिक बाइट एस्केप अनुक्रम नहीं है।

आप वास्तव में UTF-8-एनकोडेड गैर-ASCII में कैसे प्रवेश करते हैं, यह आपके OS और / या आपके संपादक पर निर्भर करता है। यहाँ आप इसे विंडोज में कैसे करते हैं । ओएस एक्स में प्रवेश करने के लिए एक कोई एक्यूट एक्सेंट तुम सिर्फ हिट कर सकते हैं option+ E, तो Aओएस एक्स समर्थन UTF-8 में, और लगभग सभी पाठ संपादक।


3

आप open()फ़ंक्शन का उपयोग करके इसकी जगह पर यूनिकोड फ़ाइलों के साथ काम करने के लिए मूल फ़ंक्शन को भी सुधार सकते हैं partial। इस समाधान की सुंदरता आप किसी भी पुराने कोड को बदलने की जरूरत नहीं है। यह पारदर्शी है।

import codecs
import functools
open = functools.partial(codecs.open, encoding='utf-8')

1

मैं पायथन 2.7.9 का उपयोग करके iCal को पार्स करने की कोशिश कर रहा था :

icalendar आयात कैलेंडर से

लेकिन मुझे मिल रहा था:

 Traceback (most recent call last):
 File "ical.py", line 92, in parse
    print "{}".format(e[attr])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 7: ordinal not in range(128)

और यह बस के साथ तय किया गया था:

print "{}".format(e[attr].encode("utf-8"))

(अब यह इसी तरह का प्रिंट ले सकता है।)


0

मुझे संपूर्ण स्क्रिप्ट की डिफ़ॉल्ट एन्कोडिंग को 'UTF-8' में बदलकर सबसे सरल तरीका मिला:

import sys
reload(sys)
sys.setdefaultencoding('utf8')

किसी भी open, printया अन्य बयान सिर्फ उपयोग करेगा utf8

कम से कम के लिए काम करता है Python 2.7.9

Thx को जाता है https://markhneedham.com/blog/2015/05/21/python-unicodeencodeerror-ascii-codec-cant-encode-character-uxfc-in-position-11-ordinal-not-in-range128/ ( अंत में देखो)।

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