我正在练习在 Windows 10 中使用命令行运行 java 脚本。java 脚本使用 scanner(System.in)
从文件中获取输入并打印从文件中获取的字符串文件。powershell命令如下:
Get-Content source.txt | java test.TestPrint
source.txt文件内容如下:
:
a
2
!
TestPrint.java 文件如下:
package test;
import java.util.Scanner;
public class TestPrint {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while(in.hasNextLine())
{
String str = in.nextLine();
if(str.equals("q")) break;
System.out.println( str );
}
}
}
然后奇怪的事情发生了。结果是
?:
a
2
!
你看,它在第一行的开头添加了问号,然后当我将source.txt文件第一行的字符从“:”更改为“a”时,结果是
a
a
2
!
它在第一行的开头添加了空格。
我测试了这个字符,发现了规律:如果字符大于ASCII中的"?"
,即ASCII中的63,那么就会添加空格,例如"A"
(ASCII 中的 65)或 "["
(ASCII 中的 91)。如果字符小于“?”,则包括“?”本身,它会添加问号。
最佳答案
这可能是 Unicode 问题吗(参见:Java Unicode problems)?即尝试指定您要读取的类型:
Scanner in = new Scanner(System.in, "UTF-8");
编辑:
经进一步研究,PowerShell 5.1及更早版本的默认代码页为Windows-1252。 PowerShell 6+ 和跨平台版本已切换为 UTF-8。因此(根据评论)您可能必须指定 Windows-1252 编码:
Scanner in = new Scanner(System.in, "Windows-1252");
要了解正在使用的编码,请在 PowerShell 中执行以下命令:
[System.Text.Encoding]::Default
您应该能够看到正在使用的编码(对于我来说,在 PowerShell v 5.1 中,它是 Windows-1252,对于 PowerShell 6 来说,它是 UTF-8)。
关于java - 在 powershell 中使用 Get-Content 作为 java 输入获取额外字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55478203/