如何以UTF-8格式获取用户输入?
如何以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("测试成功!"); } } }
如何在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编码已经正确配置。
问题的出现原因:在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编码字符。感谢提供解答的人。