[英]Unable to set correct encoding in powershell
我有一个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:在我的ps1
脚本中设置UTF-8
编码,如下所示( 源代码 ):
$OutputEncoding = New-Object -typename System.Text.UTF8Encoding
[Console]::OutputEncoding = New-Object -typename System.Text.UTF8Encoding
这没有帮助,只是将控制台输出更改为...Causes: ' ??'...
来自...Causes: 'å??'...
尝试2:直接在控制台上更改编码,如下所示( 源 ):
$OutputEncoding = [Console]::OutputEncoding
这也行不通。
无论如何这可以修复吗?
更新:此问题与PowerShell提示符中打印Unicode字符不重复,因为在我的情况下,是否在命令提示符下显示正确的字符并不重要,因为我的程序不会尝试这样做。 此外,请注意,所述问题的答案(使用[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850)
)产生完全相同的结果,因此没有提供此问题的解决方案。 此外,使用PowerShell ISE执行,而ConEmu也没有帮助。
我假设如果可以为'session'(或环境/上下文,不确定如何调用它)设置正确的编码,那么我的程序就可以正确处理arff文件了。 但是,我不知道如何。
按照@ TessellatingHeckler的评论 ,我通过设置JVM的编码选项解决了这个问题:添加系统变量JAVA_TOOL_OPTIONS
,然后将值设置为-Dfile.encoding=utf-8
(来源: https : -Dfile.encoding=utf-8
/ 2270340 )。
现在,每次启动java
,以下显示已考虑设置选项:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=utf-8
我发布这个答案来分享我的发现。 如果有更好的方法,请发表回答/评论。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.