无法在powershell

时间:2017-05-26 18:47:55

标签: java powershell encoding utf-8 windows-10

我有一个arff文件,其中包含以下属性:

@ATTRIBUTE "åäö" NUMERIC
@ATTRIBUTE "åøã" NUMERIC

该文件随UTF-8一起保存。我正在使用weka API在我的Java应用程序中读取此文件。我可以在没有任何Eclipse问题的情况下运行该程序。

但是,当我尝试从powershell或命令提示符(仅使用java -jar my-app.jar -data path/to/mydata.arff)运行程序时,我面临以下错误:

  

java.io.IOException:无法将结构确定为arff(原因:java.lang.IllegalArgumentException:属性名称不唯一!原因:'å??')。

     

at weka.core.converters.ArffLoader.getStructure(ArffLoader.java:1204)

     

at weka.core.converters.ArffLoader.getDataSet(ArffLoader.java:1234)

     

at weka.core.converters.ConverterUtils $ DataSource.getDataSet(ConverterUtils.java:269)

我尝试更改编码(默认为OEM United States (IBM437)),如下所示。

Attempt1: 在我的UTF-8脚本中设置ps1编码,如下所示(source):

$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
[Console]::OutputEncoding = New-Object -typename System.Text.UTF8Encoding

这没有帮助,只是将控制台输出从...Causes: '�??'...更改为...Causes: 'å??'...

尝试2:直接在控制台上更改编码,如下所示(source):

$OutputEncoding = [Console]::OutputEncoding

这也行不通。

无论如何这可以修复吗?

更新:此问题与Printing Unicode characters to the PowerShell prompt不重复,因为在我的情况下,是否在命令提示符下显示正确的字符并不重要,因为我的程序并不试图这样做。此外,请注意,上述问题的答案(使用[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850))产生了完全相同的结果,因此无法解决此问题。 此外,使用PowerShell ISE执行,而ConEmu也没有帮助。

我假设如果可以为'session'(或环境/上下文,不确定如何调用它)设置正确的编码,那么我的程序就可以正确处理arff文件了。但是,我不确定如何。

1 个答案:

答案 0 :(得分:0)

关注samples,我通过设置JVM的编码选项解决了这个问题:添加系统变量JAVA_TOOL_OPTIONS,然后将值设置为-Dfile.encoding=utf-8(来源:{ {3}})。

现在,每次我开始java时,以下显示已考虑设置选项:

Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8

我发布这个答案来分享我的发现。如果有更好的方法,请发表回答/评论。