2013-11-24 8 views
7
>>> import sys 
>>> sys.getfilesystemencoding() 
'UTF-8' 

मैं इसे कैसे बदलूं? मुझे पता है कि डिफ़ॉल्ट सिस्टम एन्कोडिंग कैसे बदलें।पायथन के माध्यम से फ़ाइल सिस्टम एन्कोडिंग कैसे बदलें?

>>> reload(sys) 
<module 'sys' (built-in)> 
>>> sys.setdefaultencoding('ascii') 

लेकिन कोई sys.setfilesystemencoding नहीं है।

उत्तर

3

फाइल सिस्टम एन्कोडिंग, कई मामलों में, ऑपरेटिंग सिस्टम की अंतर्निहित संपत्ति है। इसे बदला नहीं जा सकता - अगर, किसी कारण से, आपको फाइल सिस्टम एन्कोडिंग के मुकाबले अलग-अलग नामों वाले फाइलों को बनाने की आवश्यकता है, तो फ़ाइल नामों के लिए यूनिकोड स्ट्रिंग का उपयोग न करें। (या, यदि आप अजगर 3 का उपयोग कर रहे हैं, एक बाइट वस्तु के बजाय एक स्ट्रिंग की का उपयोग करें।)

See the documentation for details. विशेष रूप से, ध्यान दें कि, विंडोज सिस्टम पर, फाइल सिस्टम, देशी रूप यूनिकोड है तो कोई रूपांतरण वास्तव में है जगह लेना, और इसके परिणामस्वरूप, वैकल्पिक फाइल सिस्टम एन्कोडिंग का उपयोग करना असंभव है।

4

वहाँ इसे बदलने के लिए दो तरीके हैं:

1) (लिनक्स केवल) export LC_CTYPE=en_US.UTF8 अजगर शुरू करने से पहले:

$ LC_CTYPE=C python -c 'import sys; print(sys.getfilesystemencoding())' 
ANSI_X3.4-1968 
$ LC_CTYPE=C.UTF-8 python -c 'import sys; print(sys.getfilesystemencoding())' 
UTF-8 

ध्यान दें कि LANG LC_CTYPE के लिए डिफ़ॉल्ट मान के रूप में कार्य करता है, तो यह नहीं है सेट, LC_ALL दोनों LC_CTYPE और LANG)

2) monkeypatching ओवरराइड करता है, जबकि:

import sys 
sys.getfilesystemencoding = lambda: 'UTF-8' 

दोनों विधियां os.stat जैसे कार्यों को यूनिकोड (python2.x) स्ट्रिंग स्वीकार करते हैं। अन्यथा वे कार्य एक अपवाद उठाते हैं जब वे फ़ाइल नाम में गैर-असीसी प्रतीकों को देखते हैं।

+0

विधि 1 काम नहीं कर रहा है या मुझे – sureshvv

+0

@sureshvv आपका ओएस क्या है? –

+0

उबंटू 16.04। LANG = en_US.UTF8 को/etc/वातावरण में जोड़ना और रीबूट करना था। – sureshvv

संबंधित मुद्दे