我有一些俄罗斯名字的俄罗斯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发行版中...