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

标签 java powershell

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

相关文章:

java - 什么是NullPointerException,我该如何解决?

java - Mac OS X 上的 Tomcat 6.0

Powershell读取文本文件等到找到然后继续

windows - Git命令行和批处理文件有不同的输出

powershell - 使用 PowerShell 脚本执行 EXE 文件

java - 如何从HTML获取链接, `doc.select`的正确用法

java - Java 中字符串的反序列化

java - 我如何验证我的字符串(括号)- Android?

powershell - powershell-检查变量是否包含数组中的所有字符串

Powershell:GetType 在下游导致奇怪的行为