我有一个 arff
文件,它具有以下属性:
@ATTRIBUTE "åäö" NUMERIC
@ATTRIBUTE "åøã" NUMERIC
文件以 UTF-8
保存。我正在我的 Java 应用程序中使用 weka API 读取此文件。我可以在 Eclipse 中运行该程序,没有任何问题。
但是,当我尝试从 powershell 或命令提示符运行程序时(只需使用 java -jar my-app.jar -data path/to/mydata.arff
),我遇到以下错误:
java.io.IOException: Unable to determine structure as arff (Reason: java.lang.IllegalArgumentException: Attribute names are not unique! Causes: 'å??' ).
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)
),如下所示。
尝试1:
在我的 ps1
脚本中设置 UTF-8
编码,如下所示 ( 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 文件。但是,我不确定如何。
最佳答案
已关注 @TessellatingHeckler's comment ,我通过设置 JVM 的编码选项解决了这个问题:添加系统变量 JAVA_TOOL_OPTIONS
,然后将值设置为 -Dfile.encoding=utf-8
(来源: https://stackoverflow.com/a/24265723/2270340 )。
现在,每次我启动 java
时,都会显示以下内容已考虑到设置的选项:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8
我发布此答案是为了分享我的发现。如果有更好的方法,请发表答案/评论。
关于java - 无法在 powershell 中设置正确的编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44208347/