Изменить кодировку cmd при старте jar

215
15 мая 2022, 07:40

Делаю консольное приложение, которое получает на вход стороку и фильит, а затем выводит по заданному фильтру соответствующие слова. При двойном клике на jar открывается консоль, и выполняется приложение. Проблема в том что при выводе результата в кириллице получаеются кракозябры. Вот пример работы приложения. Помогите исправить:

 public class Grep  {
    private String inputString;
    private String filter;
public Grep(String inputString, String filter) {
        this.inputString = inputString;
        this.filter = filter;
    }
    public String getInputString() {
        return inputString;
    }
    public void setInputString(String inputString) {
        this.inputString = inputString;
    }
    public String getFilter() {
        return filter;
    }
    public void setFilter(String filter) {
        this.filter = filter;
    }

    public void grep() {
        if(getInputString().isEmpty() || getFilter().isEmpty()) {
            System.out.println("Введите данные!");
        } else {
            Stream<String> stringStream = Stream.of(getInputString().split("[\\p{Punct}\\s]+"));
            String result = stringStream.filter(s -> s.contains(getFilter()))
                    .map(String::toLowerCase)
                    .collect(Collectors.joining(", "));
            if(result.isEmpty()) {
                System.out.println("Совпадений не найдено!");
            } else System.out.println(result);
           
        }
    } }
    public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {
        final String STOP = "stop";
        if (args.length == 0) {
            Process p = Runtime.getRuntime().exec("cmd.exe /c start java -jar " + 
                    (new File(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath())).getAbsolutePath() + " cmd");
        } else {
            while (true) {
                Scanner scanner = new Scanner(System.in);
                System.out.println("Введите слова: ");
                var inputString = scanner.nextLine();
                System.out.println("Введите фильтр: ");
                var filter = scanner.nextLine().toLowerCase();
                Grep grep = new Grep(inputString, filter);
                System.out.print("Результат применения фильтра: ");
                grep.grep();
                System.out.println("Если хотите продолжить нажмите любую клавишу. Введите \"stop\" для выхода.");
                if(scanner.nextLine().equalsIgnoreCase("stop")){
                    scanner.close();
                    System.out.println("Good Bye!");
                    Thread.sleep(2000);
                    System.exit(0);
                }
            }

        }
    }
}
Answer 1

Проблема решилась добавление строки -Dfile.encoding=cp866 в параметры запуска консоли.

READ ALSO
вывод в лог русские буквы

вывод в лог русские буквы

Хочу проверить правильность заполнения из проперти и вывожу в логНо там абракадабра непонятная

299
Преобразование Map с помощью Stream API

Преобразование Map с помощью Stream API

Имеется структура типа Map<String, List<MyClass>>Как с помощью Stream API преобразовать ее к типу Map<String, List<MyClass

289
Как впихнуть в SQL запрос переменную?

Как впихнуть в SQL запрос переменную?

Есть postgres DB, пользователь вводит почту и пароль, по этим данным нужно вывести ему из другой таблицы его счетаКак в запросе в Java закинуть эту...

268
Меняется цвет изображения категории WooCommerce

Меняется цвет изображения категории WooCommerce

При загрузке изображения категории товаров происходит изменение цвета фотоОт черного к коричневому

281