java控制台charset翻译 [英] java console charset translation

查看:127
本文介绍了java控制台charset翻译的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

控制台输入(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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆