2017-05-26 20 views
1

我有一個arff文件已下列屬性:無法設置正確的編碼在PowerShell中

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

的文件保存UTF-8。我正在使用weka API在我的Java應用程序中讀取此文件。我可以在沒有任何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) ) 如下。

Attempt1:在我ps1腳本 設置UTF-8編碼如下(source):

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

這並沒有幫助,只是從...Causes: 'å??'...改變控制檯輸出...Causes: '�??'...

ATTEMPT2:在控制檯上直接更改編碼如下(source):

$OutputEncoding = [Console]::OutputEncoding 

這也沒有工作。

有沒有反正這可以修復?

更新:這個問題不是Printing Unicode characters to the PowerShell prompt重複,因爲在我的情況不要緊是否正確的字符是否顯示在命令提示符下或沒有,因爲我的程序不會嘗試這樣做。另外請注意,上述問題的答案(使用[Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding(850))產生了完全相同的結果,因此沒有解決這個問題。 此外,使用PowerShell ISE和ConEmu執行也沒有幫助。

我假設如果可以爲'會話'(或環境/上下文,不知道如何調用這個)設置正確的編碼,那我的程序就足以正確處理arff文件。但是,我不知道如何。

+1

我以爲你的問題是關於正確顯示'Causes:'å??''消息 - 但是如果你不關心這個問題,你爲什麼要改變PowerShell輸出編碼?您將文件名傳遞給Java,並且Java不會正確地將文件內容讀作UTF-8,這與shell,控制檯字符編碼,PowerShell輸出格式等無關。如果它按名稱查找文件,殼部分結束。看起來它必須是你調用的特定版本的Java.exe,或者Eclipse設置的環境變量與默認值不同,也許是? – TessellatingHeckler

+0

@TessellatingHeckler感謝您的評論。通過設置JVM的選項來解決這個問題。 –

回答

0

@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 

我張貼這個答案分享我的發現。如果有更好的方法來做到這一點,請發表回覆/評論。

相關問題