मैं कोड से निपट रहा हूं जो फाइलों के साथ विभिन्न आईओ संचालन करता है, और मैं इसे अंतरराष्ट्रीय फ़ाइल नामों से निपटने में सक्षम बनाना चाहता हूं। मैं जावा 1.5 के साथ मैक पर काम कर रहा हूं, और यदि फ़ाइल नाम में यूनिकोड वर्ण होते हैं जिन्हें सरोगेट्स की आवश्यकता होती है, तो JVM फ़ाइल को ढूंढने के लिए प्रतीत नहीं होता है। उदाहरण के लिए, अपने परीक्षण फ़ाइल है:जावा फ़ाइल नाम में सरोगेट यूनिकोड मानों के साथ एक फ़ाइल नहीं खोल सकता है?
"草鷗外.gif"
जो जावा पात्रों \u8349\uD85B\uDFF6\u9DD7\u5916.gif
अगर मैं इस फ़ाइल नाम से एक फ़ाइल बनाने के लिए, मैं इसे नहीं खोल सकता क्योंकि मैं एक FileNotFound अपवाद में बंट जाता है। यहां तक कि फ़ाइल वाले फ़ोल्डर पर इस का उपयोग करते हुए असफल हो जायेगी:
File[] files = folder.listFiles();
for (File file : files) {
if (!file.exists()) {
System.out.println("Failed to find File"); //Fails on the surrogate filename
}
}
कोड मैं वास्तव में साथ काम कर रहा हूँ के अधिकांश के रूप में हैं:
FileInputStream instream = new FileInputStream(new File("草鷗外.gif"));
// operations follow
वहाँ किसी तरह मैं इस समस्या का समाधान कर सकते हैं, या तो फ़ाइल नाम से बचने या फ़ाइलों को अलग-अलग खोलना?
आपके पर्यावरण में Charset.defaultCharset() का मूल्य क्या है? –
(दुर्भाग्यवश, स्टैक ओवरव्लो को सरोगेट्स के साथ भी समस्या है, और इस सवाल से यू +26 एफएफ 6 विचारधारा को तोड़ दिया है) – bobince
क्या आप सिस्टम.getप्रोपर्टी ("file.encoding") देता है? अपने एन्कोडिंग जावा-डीफाइल.एन्कोडिंग = ENCODING_GOES_HERE को बदलने का प्रयास करें यदि न ही आपके सिस्टम लोकेल को बदलता है। यदि यह भी करता है और न ही काम करता है तो हम इसे हल करने के लिए एक विशेषज्ञ की प्रतीक्षा करेंगे। – JCasso