यह स्टैक ओवरफ़्लो के लिए मेरी पहली पोस्ट है। मैं 1 99 8 से जावा कर रहा हूं, इसलिए मैं कोई शुरुआत नहीं कर रहा हूं। हाल ही में मुझे एक फ़ाइल वर्ण एन्कोडिंग समस्या का सामना करना पड़ा जो मुझे कभी सामना नहीं कर रहा है। पाठ फ़ाइलों के चरित्र एन्कोडिंग के बारे में जागरूक होना और सामान्य प्लेटफ़ॉर्म पर चलने पर कोड लिखने के लिए यह सामान्य बात है। लेकिन मुझे मिली समस्या संकलन निष्पादन मंच से एक अलग मंच पर हुई थी। यह पूरी तरह से अप्रत्याशित था, क्योंकि मेरे अनुभव में जब जावैक कक्षा फ़ाइल बनाता है, महत्वपूर्ण पैरामीटर जावा स्रोत और लक्ष्य पैरा हैं, और जेडीके का संकलन संकलन कर रहा है। मैक ओएस एक्स पर चलाए जाने पर, मैक ओएस एक्स पर जेडके 1.6.0_22 के साथ संकलित कक्षाओं में 1.6.0_23-बी05 के साथ संकलित कक्षाओं से अलग वर्गों से अलग व्यवहार किया गया है। निर्दिष्ट स्रोत और लक्ष्य 1.4 थे।जावा कंपाइलर प्लेटफ़ॉर्म फ़ाइल एन्कोडिंग समस्या
एक स्ट्रिंग है स्मृति में आईएसओ 8859_1 के रूप में एन्कोड किया गया था एक PrintStream println विधि का उपयोग कर डिस्क के लिए लिखा गया था। जावा कोड को किस प्लेटफॉर्म पर संकलित किया गया था, इस आधार पर स्ट्रिंग को अलग-अलग लिखा गया था। यह एक बग का कारण बनता है। बग के लिए फिक्स फ़ाइल लिखने और पढ़ने के दौरान फ़ाइल एन्कोडिंग को स्पष्ट रूप से निर्दिष्ट करना था।
मुझे आश्चर्य हुआ कि व्यवहार कहां से संकलित किया गया था, इस पर निर्भर करता है कि वर्ग किस वर्ग पर चलाया गया था। मैं अलग-अलग प्लेटफॉर्म पर चलने पर जावा कोड से अलग व्यवहार कर रहा हूं। लेकिन यह थोड़ा डरावना है जब एक ही कोड, विभिन्न प्लेटफार्मों पर संकलित, एक ही मंच पर पर अलग-अलग चलता है।
क्या किसी को इस विशिष्ट समस्या का सामना करना पड़ा है? ऐसा लगता है कि किसी भी जावा कोड के लिए बीमार होना प्रतीत होता है जो अक्षर एन्कोडिंग को स्पष्ट रूप से निर्दिष्ट किए बिना फ़ाइल को स्ट्रिंग्स को पढ़ता है और लिखता है। और यह कितनी बार किया जाता है?
धन्यवाद,
रिचर्ड ब्रूस्टर http://rabbitsoftware.com
समस्याग्रस्त फ़ाइल utf-8 के रूप में एन्कोड किया गया था? स्रोत में समस्याग्रस्त वर्ण थे, या केवल वर्णों के लिए अक्षर ** ** केवल उस विशेष मशीन पर संकलन के बाद थे? –
क्या यह स्थिर फाइनल (कक्षा में स्ट्रिंग्स फाइनल फाइनल "बेक्स" स्ट्रिंग का उपयोग करके कक्षाओं में संकलित किया गया था)? या जब आप डिस्क पर लिखे गए हैं तो क्या आप डेटा को क्रमबद्ध कर रहे हैं? एक वर्ग उदाहरण serializing? सीरियलाइजेशन विधि डिफ़ॉल्ट (यानी संकलन मंच) एन्कोडिंग के साथ संकलित किया जा रहा है? –
@ स्टेव बी .: वास्तव में, सभी स्ट्रिंग अक्षर और अन्य संकलन-समय निरंतर तार कक्षा में "बेकन" होते हैं, न केवल स्थिर अंतिम वाले। –