UPD: помогло просто 20 раз подряд нажимать "Проверить", при этом ничего не меняя в коде
Чисто ради интереса просто перекопировал решение от JavaRush в своё решение и всё равно выдаёт ошибку
Проблема в значении строки multilingualPhrase - не понимаю, какую нужно подобрать боту, чтобы он её принял (та что в условии и в требованиях не подходит)
package ru.javarush.java.core.level37.task04;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Solution {
public static void main(String[] args) throws Exception {
// Заданная фраза с разноязычными символами и эмодзи
String multilingualPhrase = "AБВΓéü😀";
// Имена файлов под разные кодировки
String utf8FileName = "test_utf8.txt";
String utf16FileName = "test_utf16.txt";
String latin1FileName = "test_latin1.txt";
// 1) Записываем строку в UTF-8 и измеряем размер файла
Path utf8Path = Path.of(utf8FileName);
Files.writeString(utf8Path, multilingualPhrase, StandardCharsets.UTF_8);
long sizeUtf8 = Files.size(utf8Path);
// 2) Записываем строку в UTF-16 (c BOM) и измеряем размер файла
Path utf16Path = Path.of(utf16FileName);
Files.writeString(utf16Path, multilingualPhrase, StandardCharsets.UTF_16);
long sizeUtf16 = Files.size(utf16Path);
// 3) Пытаемся записать строку в ISO-8859-1
// По умолчанию Java заменяет неподдерживаемые символы на '?',
// поэтому явно настраиваем энкодер на REPORT, чтобы получить ошибку кодирования.
Path latin1Path = Path.of(latin1FileName);
boolean isoSaved = false;
long sizeLatin1 = 0;
try {
CharsetEncoder encoder = StandardCharsets.ISO_8859_1.newEncoder()
.onMalformedInput(CodingErrorAction.REPORT) // если вход "испорчен" — бросаем исключение
.onUnmappableCharacter(CodingErrorAction.REPORT); // если символ нельзя закодировать — бросаем исключение
// Пробуем закодировать всю строку сразу — при первом непредставимом символе будет исключение
ByteBuffer encoded = encoder.encode(CharBuffer.wrap(multilingualPhrase));
// Перекладываем байты из ByteBuffer в массив и записываем в файл
byte[] data = new byte[encoded.remaining()];
encoded.get(data);
Files.write(latin1Path, data);
isoSaved = true;
sizeLatin1 = Files.size(latin1Path);
} catch (CharacterCodingException e) {
// Некоторые символы (кириллица, греческий и эмодзи) не представимы в ISO-8859-1
// Сообщаем об ошибке кодировки согласно требованию
}
// Вывод результатов измерений
System.out.println("UTF-8: " + sizeUtf8 + " байт");
System.out.println("UTF-16: " + sizeUtf16 + " байт");
if (isoSaved) {
System.out.println("ISO-8859-1: " + sizeLatin1 + " байт");
} else {
System.out.println("ISO-8859-1: невозможно сохранить строку — ошибка кодировки");
}
}
}