package com.javarush.test.level22.lesson13.task02; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.Charset; /* Смена кодировки В метод main первым параметром приходит имя файла, тело которого в кодировке Windows-1251. В метод main вторым параметром приходит имя файла, в который необходимо записать содержимое первого файла в кодировке UTF-8. */ public class Solution { static String win1251TestString = "Нарушение РєРѕРґРёСЂРѕРІРєРё консоли?"; //only for your testing public static void main(String[] args) throws IOException { FileInputStream in = new FileInputStream(args[0]); FileOutputStream out = new FileOutputStream(args[1]); byte[] buffer = new byte[in.available()]; int count = in.read(buffer); String s = new String(buffer, 0, count, Charset.forName("UTF-8")); // System.out.println(s); buffer = s.getBytes(Charset.forName("Windows-1251")); // System.out.println(new String(buffer)); out.write(buffer); in.close(); out.close(); } }
Поведение методов, зависящих от кодировки по умолчанию, нельзя надежно покрыть тестами, потому что кодировок достаточно много, и множество их значений может расширяться. Может выйти какая-нибудь новая ОС с кодировкой типа UTF-48, и все тесты на ней окажутся бесполезными.