以编程方式查找stderr使用的代码页

时间:2014-03-14 21:45:53

标签: java windows character-encoding

我在previous question上取得了一些进展,发现正在显示的消息是从stderr重定向的,并使用Cp850进行编码。

那么,我怎样才能从Java程序中发现这个?阅读code page 850上的维基百科页面,并查看可编码的字符,很明显,这不会在所有Windows系统上使用,因为它不包括日语所需的字符。 (我认为它不会在非Windows系统上使用。)

如果我打印出Charset.defaultCharset()的结果,我会得到windows-1252。但是使用Cp1252来解码stderr的输出并没有给出正确的编码 - 应该what打印为Š。

这个has been asked before的方式略有不同,但给出的答案是错误的,或者不适用于我正在尝试做的事情。这有可能用Java做吗?如果没有,那么人们在做什么来以他们可以阅读的格式向用户发送stderr消息?

1 个答案:

答案 0 :(得分:0)

这对我有用,为了未来Stack Overflowers的利益。

import com.sun.jna.Library;
import com.sun.jna.Native;

public static int getCodePage(){
  Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
  return lib.GetOEMCP();
}

public interface Kernel32 extends Library {
  public int GetOEMCP();
}

返回的代码页将是与Code Page Identifiers列表对应的int。这些可以与Java的list of supported encodings相关联。 (我制作了一个静态的hashmap。我确信还有其他更好的方法可以做到。)