1

我有一个由 PowerShell 使用命令生成的文本文件

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } > "C:\MyPlace\outfile.txt"

这会生成outfile.txt像这样打开的 Notepad++ 记事本++

但是当在 Java 中打开并逐行读取时,如下所示:

while((line = br.readLine()) != null) {
    line = line.replaceAll("\\s", "");
    System.out.println(i + ":\t" + line);
}

它产生这个:

Java 输出

这完全混淆了我的处理。我试过替换空白字符,但似乎没有奏效。有任何想法吗?

4

2 回答 2

4

>Out-File带有一些预定义参数设置的语法糖。其中之一是编码。默认情况下Out-File会创建一个小端 unicode 文件。因此,要使用 ASCII 编码制作文件,您可以这样做:

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } | 
    Out-File "C:\MyPlace\outfile.txt" -Encoding ASCII

...或者您可以使用Add-Content默认输出 ASCII:

GetChild-Item C:\Source\Path | ForEach-Object { $_.Name } | 
    Add-Content "C:\MyPlace\outfile.txt"
于 2012-05-25T17:58:55.490 回答
3

问题似乎是 Powershell 正在发出一个具有 unicode 编码的文件,但 Java 将它作为普通的旧 ASCII 读取。您需要更改 java 代码以将文件读取为 unicode。

于 2012-05-25T17:42:16.040 回答