gpt4 book ai didi

java - 在 powershell 中使用 Get-Content 作为 java 输入获取额外字符

转载 作者:行者123 更新时间:2023-11-30 05:42:00 24 4
gpt4 key购买 nike

我正在练习在 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/

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