gpt4 book ai didi

java控制台字符集翻译

转载 作者:搜寻专家 更新时间:2023-10-31 08:11:20 24 4
gpt4 key购买 nike

控制台输入(win),字符集转换是如何工作的?

下面的代码,非 ascii 字符输出垃圾 - 下面示例中的 InputStreamReader 没有将字符集作为参数。

BufferedReader console = new BufferedReader( new InputStreamReader(System.in));
String inp = console.readLine();
System.out.println(inp.toUpperCase());

Java 与操作系统无关,如何解决控制台提示输入的所有不同可能的字符集配置?

最佳答案

实际上,Java 根本不处理这个问题

它只是假定控制台编码与系统默认编码相同。 This assumption is wrong on Windows systems ,因此 Java 没有提供好的解决方案来针对 Windows 上的非 ASCII 字符执行正确的控制台 IO。

可能的解决方案是:

  • 使用 Java 6 中引入的 System.console():

    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());

    据我所知,没有很好的方法可以在没有 native 代码的情况下以编程方式确定实际的控制台编码。

  • 使用 file.encoding 属性将控制台编码指定为默认编码,以便控制台 IO 使用默认编码的假设是正确的:

    java -Dfile.encoding=... ...

关于java控制台字符集翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8616915/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com