我有俄语 Windows 7,其中一些设备以俄语命名。如果我通过我获得了混音器之类的设备,AudioSystem.getMixerInfo()
我已经Mixer.Info.getName()
错误地解码为 unicode。
是否可以控制转换或者这是 Java 设计错误?
更新
实际上,Java 从 CP1252 解码为 unicode,而我的默认语言环境是 CP1251。用CP1251怎么说?
我有俄语 Windows 7,其中一些设备以俄语命名。如果我通过我获得了混音器之类的设备,AudioSystem.getMixerInfo()
我已经Mixer.Info.getName()
错误地解码为 unicode。
是否可以控制转换或者这是 Java 设计错误?
更新
实际上,Java 从 CP1252 解码为 unicode,而我的默认语言环境是 CP1251。用CP1251怎么说?
只需查看以下链接:
https ://bugs.openjdk.java.net/browse/JDK-8177951
http://mail.openjdk.java.net/pipermail/sound-dev/2017-June/000564.html
所以我正在努力修复这个错误,但似乎 Oracle 中没有人回应我。我把补丁发给了bug的受理人(由我发布,由受理人管理),但他没有回复我,可能是几天后。希望这个补丁将包含在第一个 JDK9 版本中......
我有同样的问题(在俄罗斯 Windows 7 中)。我认为获取俄语设备名称的唯一方法是将其转换为正确的字符集:
for (Mixer.Info info : AudioSystem.getMixerInfo()) {
System.out.println(new String(info.getName().getBytes("Windows-1252"), "Windows-1251"));
}