繁体   English   中英

无法在PowerShell中设置正确的编码

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM