java控制台charset翻译 [英] java console charset translation
问题描述
控制台输入(win),charset转换是如何工作的?
Console input (win), how is the charset convertion working?
下面的代码,非ascii字符输出垃圾 - 下面的示例中的InputStreamReader不带charset作为参数。
Code below, non-ascii chars output garbage - InputStreamReader in the below example doesn't take charset as an argument.
BufferedReader console = new BufferedReader( new InputStreamReader(System.in));
String inp = console.readLine();
System.out.println(inp.toUpperCase());
与os无关,Java如何解决有关控制台提示输入的所有不同可能的字符集配置?
Being os-independent, how does Java solve all different possible charset configurations regarding console prompt input?
推荐答案
实际上, Java根本不能解决这个问题。
它只是假设控制台编码与系统默认编码相同。 这个假设在Windows系统上是错误的,因此Java无法提供执行正确控制台IO的良好解决方案关于Windows上的非ascii字符。
It simply assumes that console encoding is the same as the system default encoding. This assumption is wrong on Windows systems, therefore Java doesn't provide good solution to perform correct console IO with respect to non-ascii characters on Windows.
可能的解决方案是:
-
使用Java 6中引入的
System.console()
:
BufferedReader in = new BufferedReader(System.console().reader());
BufferedWriter out = new PrintWriter(System.console().writer(), true);
out.println(in.readLine().toUpperCase());
请注意 System.console()
可以当您使用重定向IO运行程序时,返回 null
,例如,在IDE中。这种情况需要回退。
Note that System.console()
can return null
when you program run with redirected IO, for example, in IDE. You need a fallback for this case.
明确指定控制台编码:
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());
据我所知,没有很好的方法可以在没有本机代码的情况下以编程方式确定实际的控制台编码。
As far as I know, there are no good ways to determine actual console encoding programmatically without native code.
使用 file.encoding
属性将控制台编码指定为默认编码,以便假设控制台IO使用默认编码是正确的:
Specify console encoding as default encoding using file.encoding
property, so that the assumption that console IO uses default encoding would be correct:
java -Dfile.encoding=... ...
这篇关于java控制台charset翻译的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!