我有一些俄羅斯名字的俄羅斯Windows 7。如果我通過AudioSystem.getMixerInfo()
獲得像調音臺這樣的設備,我有Mixer.Info.getName()
解碼爲unicode錯誤。是否可以控制Mixer.Info字符集?
是否可以控制轉換或這是Java設計錯誤?
UPDATE
其實從Java CP1252解碼爲Unicode,而我的默認語言環境是CP1251。如何說它使用CP1251?
我有一些俄羅斯名字的俄羅斯Windows 7。如果我通過AudioSystem.getMixerInfo()
獲得像調音臺這樣的設備,我有Mixer.Info.getName()
解碼爲unicode錯誤。是否可以控制Mixer.Info字符集?
是否可以控制轉換或這是Java設計錯誤?
UPDATE
其實從Java CP1252解碼爲Unicode,而我的默認語言環境是CP1251。如何說它使用CP1251?
我有同樣的問題(俄語Windows 7)。我認爲,在俄羅斯獲得設備名稱的唯一方法是將其轉換爲正確的字符集:下面
for (Mixer.Info info : AudioSystem.getMixerInfo()) {
System.out.println(new String(info.getName().getBytes("Windows-1252"), "Windows-1251"));
}
只看到鏈接:
https://bugs.openjdk.java.net/browse/JDK-8177951
http://mail.openjdk.java.net/pipermail/sound-dev/2017-June/000564.html
所以我在努力修復這個bug,但似乎沒有人在Oracle響應我。我將補丁發給了bug的受讓人(它由我發佈並由受讓人管理),但他沒有回覆我,可能會在稍後的幾天。希望這個補丁包含在第一個JDK9發行版中...