При работе с Java часто возникает потребность в установке определенной кодировки символов по умолчанию. Это может быть необходимо при обработке текстовых файлов, веб-страниц, строк и других данных, содержащих текст.
Рассмотрим типичный пример. Предположим, есть программа, которая открывает текстовый файл, читает его содержимое, преобразует это содержимое в некоторую строку, а затем записывает эту строку обратно в файл. В таком случае, необходимо, чтобы при чтении и записи использовалась одна и та же кодировка.
Было бы логично предположить, что для установки кодировки по умолчанию следует использовать системное свойство file.encoding
. Например, можно попытаться выполнить следующий код:
System.setProperty("file.encoding", "UTF-8");
Затем можно попытаться прочитать и записать файл, используя установленную кодировку:
byte inbytes[] = new byte[1024]; FileInputStream fis = new FileInputStream("response.txt"); fis.read(inbytes); FileOutputStream fos = new FileOutputStream("response-2.txt"); String in = new String(inbytes, "UTF8"); fos.write(in.getBytes());
Однако, несмотря на то, что системное свойство file.encoding
действительно установлено в UTF-8
, кодировка по умолчанию, используемая JVM, не изменится. Это связано с тем, что JVM устанавливает кодировку по умолчанию только один раз при старте, исходя из системных свойств, и не предоставляет возможности изменить ее в процессе работы.
Тем не менее, для большинства задач необходимости изменения кодировки по умолчанию не возникает. Вместо этого можно явно указывать кодировку при выполнении операций с текстовыми данными. Например, классы InputStreamReader
и OutputStreamWriter
позволяют указать кодировку при чтении и записи текстовых данных:
InputStreamReader isr = new InputStreamReader(new FileInputStream("response.txt"), "UTF-8"); OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("response-2.txt"), "UTF-8");
Такой подход обеспечивает большую гибкость и позволяет избежать возможных проблем с кодировкой.
Добавить комментарий