সুস্পষ্ট উত্তরটি ব্যবহার করা হয় Charset.defaultCharset()
তবে আমরা সম্প্রতি আবিষ্কার করেছি যে এটি সঠিক উত্তর হতে পারে না। আমাকে বলা হয়েছিল যে ফলাফলটি বেশ কয়েকটি অনুষ্ঠানে java.io ক্লাস দ্বারা ব্যবহৃত রিয়েল ডিফল্ট চরসেটের থেকে আলাদা। দেখে মনে হচ্ছে জাভা ডিফল্ট চরসেটের 2 সেট রাখে। কারও কি এই ইস্যুতে অন্তর্দৃষ্টি আছে?
আমরা একটি ব্যর্থ কেস পুনরুত্পাদন করতে সক্ষম হয়েছি। এটি এক ধরণের ব্যবহারকারীর ত্রুটি তবে এটি অন্য সমস্ত সমস্যার মূল কারণটি উন্মোচিত করতে পারে। এখানে কোড,
public class CharSetTest {
public static void main(String[] args) {
System.out.println("Default Charset=" + Charset.defaultCharset());
System.setProperty("file.encoding", "Latin-1");
System.out.println("file.encoding=" + System.getProperty("file.encoding"));
System.out.println("Default Charset=" + Charset.defaultCharset());
System.out.println("Default Charset in Use=" + getDefaultCharSet());
}
private static String getDefaultCharSet() {
OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream());
String enc = writer.getEncoding();
return enc;
}
}
লিগ্যাসি প্রোটোকলটিতে কিছু মিশ্র এনকোডিং (এএনএসআই / ল্যাটিন -১ / ইউটিএফ -8) মোকাবেলার জন্য আমাদের সার্ভারের ল্যাটিন -১ এ ডিফল্ট চরসেট প্রয়োজন। সুতরাং আমাদের সমস্ত সার্ভারগুলি এই জেভিএম প্যারামিটার দিয়ে চলেছে,
-Dfile.encoding=ISO-8859-1
এখানে জাভা 5 এ ফলাফল,
Default Charset=ISO-8859-1
file.encoding=Latin-1
Default Charset=UTF-8
Default Charset in Use=ISO8859_1
কেউ কোডে ফাইল.ইনকোডিং সেট করে এনকোডিং রানটাইম পরিবর্তন করার চেষ্টা করে। আমরা সবাই জানি যে কাজ করে না। যাইহোক, এটি স্পষ্টতই ডিফল্টচার্সেট () ছুঁড়ে ফেলেছে তবে এটি আউটপুটস্ট্রিম রাইটার দ্বারা ব্যবহৃত প্রকৃত ডিফল্ট চরসেটকে প্রভাবিত করে না।
এটি কি কোনও বাগ বা বৈশিষ্ট্য?
সম্পাদনা: গৃহীত উত্তরগুলি সমস্যার মূল কারণ দেখায়। মূলত, আপনি জাভা 5-এ ডিফল্টচরसेट () বিশ্বাস করতে পারবেন না, এটি আই / ও ক্লাস দ্বারা ব্যবহৃত ডিফল্ট এনকোডিং নয়। দেখে মনে হচ্ছে জাভা 6 এই সমস্যাটিকে সংশোধন করে।