Как я могу получить пользовательский ввод в UTF-8? - PullRequest
0 голосов
/ 10 января 2019

Мне нужен пользовательский ввод из cmd / терминала, и я хочу, чтобы он был закодирован в UTF-8. Проблема в том, что все, что я пробовал, похоже, не работает, включая множество вещей, которые я нашел в Stackoverflow.

Я пытался использовать класс Scanner с System.in в качестве входных данных, но он не работал:

Scanner scanIn = new Scanner(System.in, "UTF-8");
String command= scanIn.nextLine();

Я должен получить Чеч, вместо этого я получаю ???.

Я знаю, что System.in не использует UTF-8, и эта проблема может лежать там, однако я мог бы использовать альтернативу, если таковая имеется.

package utfexample;

import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.Scanner;



public class UTFExample {


    public static void main(String[] args) throws UnsupportedEncodingException {

        System.out.println("Enter command: ");

        Scanner scanIn = new Scanner(new InputStreamReader(System.in, "UTF-8"));
        String command = scanIn.nextLine();


        System.out.println("command: " + command + "\n");

        if(command.equals("Č")){
            System.out.println("Test was successful!");

        }
    }


}

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Попробуйте следующий код:

package utfexample;

import java.io.Console;

public class UTFExample {

    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.err.println("No console");
            System.exit(1);
        }
        String command = console.readLine("Enter command: %n");
        System.out.format("command: %s%n", command);
        if (command.equals("Č")) {
            System.out.println("Test was successful!");
        }
    }

}

Чтобы запустить его в cmd, перед вашей программой выполните следующую команду:

chcp 1250

Для удобства вы можете поместить все это в пакетный файл со следующим содержимым:

@echo off
chcp 1250 >nul
java <your_parameters_here>
0 голосов
/ 10 января 2019

Проверьте вашу среду, если она имеет кодировку UTF-8. Если вы используете какой-то другой набор символов, вам необходимо настроить его соответствующим образом.

Этот код может помочь вам определить, какую конфигурацию charaset вы используете.

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Locale;
import static java.lang.System.out;
/**
 * Demonstrate default Charset-related details.
 */
public class CharsetDemo
{
   /**
    * Supplies the default encoding without using Charset.defaultCharset()
    * and without accessing System.getProperty("file.encoding").
    *
    * @return Default encoding (default charset).
    */
   public static String getEncoding()
   {
      final byte [] bytes = {'D'};
      final InputStream inputStream = new ByteArrayInputStream(bytes);
      final InputStreamReader reader = new InputStreamReader(inputStream);
      final String encoding = reader.getEncoding();
      return encoding;
   }
   public static void main(final String[] arguments)
   {
      out.println("Default Locale:   " + Locale.getDefault());
      out.println("Default Charset:  " + Charset.defaultCharset());
      out.println("file.encoding;    " + System.getProperty("file.encoding"));
      out.println("sun.jnu.encoding: " + System.getProperty("sun.jnu.encoding"));
      out.println("Default Encoding: " + getEncoding());
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...