java - 无法在 powershell 中设置正确的编码

标签 java powershell encoding utf-8 windows-10

我有一个 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/

相关文章:

javascript - “源代码字符集”与 'Execution charset'

php - 特殊 ä ö 字符破坏 UTF-8 编码

javascript - 使用 javascript 的正则表达式验证 - 法语字母表在 IE6 中不起作用

Java - 使用递归反转字符串

java - 如何读取已导入 Eclipse 的文件夹内的文本文件?

powershell - 如何在PowerShell中获取详细的异常

c# - 从 C# 调用 COM 对象

windows - 如何使用 Powershell 检查操作系统架构(32 位或 64 位)?

java - Visual Studio 构建配置的 Eclipse 等价物是什么?

java - 无法使用 Java 添加/实现 DocuSign 下拉框?