我有以下代码行。我想使用正确的编码方案。
Process process = processBuilder.start();
InputStreamReader isr = new InputStreamReader(process.getInputStream());
我的 eclipse 默认使用 Windows-1252
编码。而当我在命令提示符下运行 chcp 命令时,结果是 codepage 437
。
这意味着我从命令行获取的字节流是使用 (codepage437) 与 JVM 使用的方案 (windows1252) 不同的方案进行编码的。如何做当我希望我的应用程序跨不同平台运行时,我在两者之间进行同步。[我无法硬编码以在我的 java 应用程序中使用代码 437]
最佳答案
Eclipse 与此无关。在运行时,您的常量是 UTF-16 字符串,与您在 Eclipse 中设置的 Java 源代码无关。从流中读取的程序只需知道您启动的进程中使用的编码即可。正如您所注意到的,这取决于您运行的计算机类型、您的设置以及您启动的程序的创建者所做的选择。我希望 Windows 上 native 非 _UNICODE 程序写入的字节的文字值出现在流中。如果您正在运行的程序是作为 _UNICODE 应用程序构建的,那么流中会出现什么是一个有趣的问题......UTF-16?在任何情况下,任何创建任何命令行程序的程序员都可以将他们喜欢的任何内容发送到标准输出流:即使系统上的所有其他程序都出现问题,例如 Windows-1252,一个特定的程序也可能会编写 UTF-8 和已记录这样做,以便与 >
重定向到文件中一起使用。您只需要知道即可。
关于java - Process.getInputStream() 编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26565657/