当前位置: 首页 > 面试题库 >

Java:如何检测(并更改?)System.console的编码?

孟鸿德
2023-03-14
问题内容

我有一个在控制台上运行的程序,其Umlauts和其他特殊字符在Mac上输出为?。这是一个简单的测试程序:

public static void main( String[] args ) {
    System.out.println("höhößüä");
    System.console().printf( "höhößüä" );
}

在默认的Mac控制台(使用默认的UTF-8编码)上,将打印:

 h?h????
 h?h????

但是在将Mac终端的编码手动设置为“ Mac OS Roman”后,它可以正确打印

 höhößüä
 höhößüä

请注意,在Windows系统上,使用System.console()可以工作:

 h÷h÷▀³õ
 höhößüä

那么,如何使我的程序… rolleyes …“无处不在”?


问题答案:

艾帕加:在这里看看。您可以在打印流中设置输出编码-
只需确定或绝对确定要设置哪个即可。

import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class Test {
    public static void main (String[] argv) throws UnsupportedEncodingException {
    String unicodeMessage =
    "\u7686\u3055\u3093\u3001\u3053\u3093\u306b\u3061\u306f";

    PrintStream out = new PrintStream(System.out, true, "UTF-8");
    out.println(unicodeMessage);
  }
}

要确定控制台编码,您可以使用系统命令“ locale”并解析输出,该输出在德语UTF-8系统上如下所示:

LANG="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_CTYPE="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_ALL=


 类似资料:
  • 是否有一种方法可以在每次文件更改时以某种方式触发一个事件?我是指类似的东西(在伪代码中) 我知道我可以周期性地做,但我能在没有计时器的情况下做吗?我希望在用户更新txt文件时(不是通过代码,而是通过打开文件并在里面写入)能够做出一些动作,但我不知道他什么时候会这么做。

  • 我有一个带有子组件的组件。 在时间轴组件中,我有这些属性: 如何检查何时从时间轴组件对属性进行更改?每当编辑值发生更改时,我都需要发出该值。 我应该为编辑属性使用一个setter,然后从那里发出吗? 或者有其他方法吗?

  • 问题内容: 在Angular 1中,通过检查$ scope层次结构来进行更改检测。我们将在模板,控制器或组件中隐式或显式创建观察者。 在Angular 2中,我们不再具有$ scope,但是我们确实覆盖了setInterval,setTimeout等。我可以看到Angular如何使用它来触发$ digest,但是Angular如何确定发生了什么变化,特别是考虑到Object.observe从未进入

  • 我正在用ExoPlayer 2在Android上开发视频播放器 我正在寻找在SubtitleView(屏幕上部)中检测字幕更改的方法,以在TextView(屏幕下部)中自动滚动字幕<似乎没有听众这么做<我试了几个听众的字幕,但没有效果<你有什么想法吗

  • 问题内容: 如何轻松检测变量何时更改值?我希望每当指定变量更改值时,程序的执行就在调试器上中断。现在,我正在使用Eclipse的调试器。 问题答案: 对于类或实例变量 右键单击大纲视图中的变量 选择“切换监视点” 然后,在breapkoints视图中,可以右键单击结果条目 选择“断点属性” 取消选择“现场访问”。

  • 我得到了一个组件,它只是一个/-计数器。我可以从这个组件中获取我需要的值的引用,如下所示: 显示来自组件的正确值,但我不知道如何在父组件中观察此值的变化。对我来说,修改此子组件的代码非常困难,在这种情况下,我可能会使用来通知父组件更改。 我如何在我的父组件中为这个的注册一个等待器?