如何以UTF-8格式获取用户输入?

16 浏览
0 Comments

如何以UTF-8格式获取用户输入?

我需要从cmd/终端获取用户输入,并希望它以UTF-8编码。问题是,我尝试过的所有方法都不起作用,包括我在Stackoverflow上找到的许多方法。\n我尝试使用Scanner类和System.in作为输入,但它没有起作用:\n

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

\n我应该得到ČČČ,但实际上得到的是???。\n我知道System.in不使用UTF-8,问题可能就在这里,但如果有其他替代方法,我也可以使用。\n

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("输入命令:");
        Scanner scanIn = new Scanner(new InputStreamReader(System.in, "UTF-8"));
        String command = scanIn.nextLine();
        System.out.println("命令:" + command + "\n");
        if(command.equals("Č")){
            System.out.println("测试成功!");
        }
    }
}

0
0 Comments

如何在UTF-8中获取用户输入?

问题的原因是:用户想要在UTF-8编码下获取用户输入,但当前环境可能没有设置为UTF-8编码。

解决方法是:首先,检查环境是否已经设置为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;
/**
 * 演示默认字符集相关细节。
 */
public class CharsetDemo {
    /**
     * 获取默认编码,而不使用Charset.defaultCharset()和System.getProperty("file.encoding")。
     *
     * 默认编码(默认字符集)。
     */
    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());
    }
}

这段代码可以帮助你查看当前字符集配置。如果需要配置,则可以在目标机器上运行以下示例代码,并查看是否需要进行配置。另外,还可以通过将环境变量JAVA_TOOLS_OPTIONS设置为-Dfile.encoding="UTF-8"来强制通过JVM设置字符集。

输出结果如下:

Default Locale: en_US

Default Charset: UTF-8

file.encoding: UTF-8

sun.jnu.encoding: Cp1252

Default Encoding: UTF8

这是输出结果,表示UTF-8编码已经正确配置。

0
0 Comments

问题的出现原因:在Java中,如果要获取用户输入的UTF-8编码字符,通常会使用Scanner类来获取输入。然而,Scanner类在处理非ASCII字符时可能会出现问题,无法正确读取UTF-8编码的字符。

解决方法:可以使用Console类来获取用户输入,这个类提供了更好的支持UTF-8编码字符的方法。以下是一个示例代码:

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。可以将这些命令放入批处理文件中以方便使用:

 off
chcp 1250 >nul
java <your_parameters_here>

通过使用Console类和设置正确的编码,可以成功获取用户输入的UTF-8编码字符。感谢提供解答的人。

0