2013-08-07 61 views
1

我使用这个命令:PowerShell的输出格式不正确的文件名

Get-ChildItem | Foreach-Object {$_.BaseName} > file_names.txt 

打印在我的当前目录中的文件名文件(没有最终扩展)。在记事本中打开文件名显示正确打印的文件名。很简单,是的。凉。

我的问题是,在用Java中的BufferedReader读取文件名时,文件名会变得格格不入。例如,

20100916_090350_S1_1_auto获得test_1.Rad出来作为

ÿþ20 1 0 0 9 1 6 _ S 1 _ 1 _ U字吨Ôg的I N T E式T _ 1。 R A d

(在.Rad扩展应该在那里,有后,另一部分,我想删除)

我认为这是某种类型的编码问题愚蠢的窗口。不幸的是,我对这些事情一无所知。任何帮助,将不胜感激。

感谢

回答

4

PowerShell的默认发出unicode的,你看到的字符开头被称为BOM(字节顺序标记)。您可以强制Java读取Unicode,也可以强制Powershell输出其他编码,最好在Out-File(参数-Encoding)的帮助下输入defaultOEM。所以总结试试这个:

Get-ChildItem | ForEach-Object {$_.BaseName} | Out-File -Encoding default file_names.txt 
+0

真棒,它的工作!所以我发现前段时间需要摆脱物料清单,但最后一个半小时没有做到这一点。我没有指定任何编码,所以我认为它使用的是默认值。为什么告诉它使用默认的编码,当它没有这样做之前呢? –

+0

那么,'>'语法只是'|的语法糖。 Out-File“,根据[文档](http://technet.microsoft.com/en-us/library/hh849882.aspx),Out-File的默认编码是Unicode。例如,在波兰语中,“默认”是代码页1250,“OEM”是旧DOS代码页852.我不建议深入研究OEM/ANSI编码的怪癖,只是尝试使用Unicode或UTF-8尽可能提供与现代国际意识环境的兼容性。 – Endrju

+0

我明白,我感到困惑的是,我最初并未指定将其编码为什么。这些文件最终编码为Big-Endian(不管那是什么),所以我认为这是默认的;这就是为什么我不打扰尝试默认编码。当我尝试使用UTF-8编码时,我只能使用BOM获取编码。我只是好奇它为什么没有默认为“默认”设置。另外,谢谢。 –

0

你可能想使用ASCII输出。 使用这个:

Get-ChildItem | ForEach-Object {$_.BaseName} | Out-File -Encoding ASCII -FilePath file_names.txt