如何获得UTF-8中的用户输入?

时间:2019-01-09 21:01:39

标签: java input

我需要来自cmd / terminal的用户输入,并且希望以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 :(得分:0)

检查您的环境是否具有UTF-8字符集。如果您使用其他字符集,则需要进行相应的配置。

此代码可以帮助您确定所使用的字符集配置。

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());
   }
}

答案 1 :(得分:0)

尝试以下代码:

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>