控制台输入(win),字符集转换如何工作?
以下代码是非ascii字符输出垃圾-下例中的InputStreamReader不会将charset作为参数。
BufferedReader console = new BufferedReader( new InputStreamReader(System.in));
String inp = console.readLine();
System.out.println(inp.toUpperCase());
与操作系统无关,Java如何解决与控制台提示输入有关的所有不同字符集配置?
实际上, Java根本无法解决这个问题 。
它仅假设控制台编码与系统默认编码相同。这个假设在Windows系统上是错误的,因此Java不能提供很好的解决方案来针对Windows上的非ASCII字符执行正确的控制台IO。
可能的解决方案是:
System.console()
Java 6中引入的用法: BufferedReader in = new BufferedReader(System.console().reader());
BufferedWriter out = new PrintWriter(System.console().writer(), true);
out.println(in.readLine().toUpperCase());
请注意,当您使用重定向的IO进行程序运行时(例如在IDE中),该System.console()
函数可能会返回null
。您需要针对这种情况进行后备。
String consoleEncoding = "...";
BufferedReader in = new BufferedReader(new InputStreamReader(System.in, consoleEncoding));
BufferedWriter out = new PrintWriter(new OutputStreamWriter(System.in, consoleEncoding), true);
out.println(in.readLine().toUpperCase());
据我所知,没有很好的方法来以编程方式确定没有本地代码的实际控制台编码。
file.encoding
属性将控制台编码指定为默认编码,这样假设控制台IO使用默认编码将是正确的:java -Dfile.encoding=... ...
问题内容: Java如何确定用于的编码? 给定以下类别: 它被保存为UTF-8并在Windows系统上进行编译。 然后在git-bash控制台上(使用UTF-8字符集),我这样做: 这里发生了什么? 显然,java检查它是否连接到终端,并在这种情况下更改其编码。有没有一种方法可以迫使Java简单地输出普通的UTF-8? 我也使用cmd控制台尝试了相同的操作。重定向STDOUT似乎没有任何区别。如果
我目前有一个简单的函数(发布在下面),它问用户一个问题,并希望有一个整数答案。 是否有一种方法可以使java限制可以输入控制台的字符,即只允许输入数字。 我知道在其他编程语言中有简单的方法来实现这一点,但我应该如何在java中实现这一点并将其实现到我的函数中呢?
问题内容: 通过控制台进行任何输入的数据类型(如我使用BufferedReader类所做的那样)为String。之后,我们将其类型转换为需要查询的数据类型(如Inter.parseInt()为整数)。但是在C语言中,我们可以接受任何输入原始数据类型,而在Java中,所有输入类型都是Neccerily String。为什么是这样? 问题答案: 控制台输入实际上以一系列字节而不是字符串的形式读入。这是
问题内容: 谁能告诉我Java用什么代码实现清晰屏幕?例如在C ++中 Java使用什么代码实现清晰的画面? 谢谢! 问题答案: 由于这里有几个答案显示了Windows的无效代码,因此请澄清一下: 该命令没有工作,有两个原因: 在Windows的命令行解释器中内置了众所周知的命令,因此没有可通过调用的名为或在标准安装中的可执行文件。 通过启动新进程时Runtime.exec,标准输出将重定向到启动
问题内容: 我有这个程序,它遍历ArrayList并使用System.out将各种与手机相关的信息打印到控制台。 我的问题是,名称较长的客户会“推”空格字符串,导致对齐混乱。有什么办法可以使对齐方式一致吗? 问题答案: 首先,您需要计算每列的最大宽度… 掌握这些信息后,您可以简单地使用生成一个值来填充,使其符合要求 这是我从先前关于类比主题的问题所修改的一个示例。 这将生成并输出类似的
问题内容: 我有一个函数的返回类型为VOID,它直接在控制台上打印。 但是,我需要字符串形式的输出,以便可以对其进行处理。 由于我无法使用返回类型为VOID的函数进行任何更改,因此我不得不将该输出重定向到字符串。 如何在JAVA中重定向它? 关于将stdout重定向到字符串有很多问题,但是它们仅重定向从用户获取的输入,而不重定向某些函数的输出… 问题答案: 如果功能正在打印到,则可以使用更改为你提