एक सहयोगी के साथ काम करते हुए मुझे एक अजीब मुद्दा मिला जो एन्कोडिंग से संबंधित लगता है। हम है कि इस तरह के रूप में सरल पर्याप्त फ़ाइल नाम कुछ छवियों के साथ काम कर रहे हैं city.gif
या wine.gif
, लेकिन जैसा कि एक उम्मीद कर सकते हैं बातें अधिक जब विशेष वर्ण जैसे का उपयोग कर आप जटिल é
, ë
, à
। हम डच डेटा के साथ भी काम कर रहे हैं, जिसमें ये पात्र हैं, जैसे café
( पब )। (फाइलों की उत्पत्ति पर हमारा नियंत्रण नहीं है।) यहां उन मुद्दों पर चर्चा शुरू होती है। निम्न फ़ाइल नाम केवल एक उदाहरण हैं। मुद्दा विकृति विज्ञान के साथ अन्य पात्रों के लिए भी होता है।
café-2.png
cafetaria.png
café.png
पहले और अंतिम आइटम में एक उच्चारण ई होना चाहिए (उच्चारण aigu, é
)। जब यह टर्मिनल में लिनक्स (CentOS 6 & 7) में दिखाया जाता है, तो यह कैसे चलता है ls
। लेकिन यहाँ विंडोज आता है! (विंडोज 10, 64 बिट का उपयोग करते हुए।) जब हमारे सर्वर के साथ एसएसएल के माध्यम से विंडोज पर कनेक्ट किया जाता है और फिर कॉलिंग होती है ls
, तो ऊपर दी गई सूची इस तरह दिखती है:
café-2.png
cafetaria.png
caf▒.png
जैसा कि आप उम्मीद कर सकते हैं, पहली पंक्ति में अभी भी उच्चारण ई है é
, लेकिन तीसरा नहीं है। इसके बजाय, मैं ▒
इस चरित्र को देखता हूं - जो medium shade
यूनिकोड (9618 दशमलव) में है। यह अपने आप में अजीब है। हालाँकि, जब मैं फ़ाइल के साथ SFTP के माध्यम से कनेक्ट करता हूँ Filezilla (अभी भी विंडोज पर) मुझे यह देखने को मिलता है:
café-2.png
cafetaria.png
café.png
इसलिए अब चीजें बदल गई हैं: पहले एक é
में, क्रम में बदल गई है और तीसरे में सब कुछ ठीक है। मैंने यहां पाया कि लैटिन -1 <-> यूटीएफ -8 रूपांतरण के कारण यह सबसे अधिक संभावना है, अगर मैं सही हो गया तो गलत हो गया। लेकिन यह सब ठीक नहीं चल रहा है?
जैसा कि हम फ़ाइल नाम (SSH (पोटीन), या SFTP (filezilla)) को देखते हैं, लिनक्स उम्मीद के मुताबिक सबकुछ दिखाता है, विंडोज प्रतीत होता है कि असंगत व्यवहार है। क्या इन फ़ाइलनामों को 'सामान्य' करने का एक तरीका है - यानी उन्हें संपादित करें - और यह सुनिश्चित करें कि वे हर ओएस पर समान हैं; या कम से कम लगातार, और यदि हां, तो कैसे? UTF-8
हमारी पसंद की एन्कोडिंग है।
हालांकि यह केवल एक सौंदर्य मुद्दा हो सकता है, यह नहीं है। जब हमारे लिनक्स सर्वर से विंडोज में एसएफटीपी के माध्यम से चीजों को डाउनलोड करने की कोशिश की जाती है, तो मैं उन फाइलों को डाउनलोड नहीं कर सकता जिनके पास ऊपर बताई गई समस्या है। Filezilla जैसे एक त्रुटि फेंक देंगे Can't download file café-2.png: café-2.png does not exist on the server
। जो मुझे लगता है कि फाइलज़िला निर्देशिका और फ़ाइल नाम पढ़ता है, इसे कुछ एन्कोडिंग में व्याख्या करता है, सर्वर को इसकी व्याख्या के साथ एक जीईटी अनुरोध भेजता है, लेकिन यह व्याख्या लिनक्स फ़ाइल नाम से भिन्न होती है, इसलिए परिणामस्वरूप फ़ाइल नहीं मिली है।
अंततः यह अच्छा होगा यदि कोई समाधान उपलब्ध है, भले ही मुझे भी दिलचस्पी है कि ऐसा क्यों होता है। क्या ऐसा होता है क्योंकि छवि फ़ाइलों को संभवतः अलग-अलग ऑपरेटिंग सिस्टम पर बनाया गया था? क्या यह होता है क्योंकि लिनक्स सर्वर उन्हें गलत व्याख्या करता है, या विंडोज गड़बड़ कर रहा है? उम्मीद है कि एक ऐसा समाधान है जहाँ हम बस अपने sysadmin से संपर्क कर सकते हैं और उन्हें सर्वर कॉन्फिगर में स्विच चालू करने के लिए कह सकते हैं, लेकिन मुझे डर है कि यह उतना आसान नहीं है।
python -c "import sys; print(repr(sys.argv[1]))" café-2.png
और python -c "import sys; print(repr(sys.argv[1]))" café.png
?