我需要来自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!");
}
}
}
答案 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>