我一直在用Java jacob编写Java程序,这有助于与wmi一起工作。面对这样的问题,团队不在西里尔语中工作。
String userName = Dispatch.get(dItem2, "Name").getString();
String objUser = "WinNT://IUMAG/" + userName + ",user";
Dispatch dServ2 = new Dispatch(objUser);
如果用户名是用俄语写的,则会出现错误,如果是英语,那么一切都很好 我该如何解决这个问题?
答案 0 :(得分:0)
我认为(来自英语发言者)答案来自http://www.sql.ru/forum/1167615/java-jacob-rabota-s-kirillicey:
宏A2W在Windows Wide char中转换ANSI编码的数据。于是 结论,输入行应包含ANSI编码的数据 Windows(可能在1251年),但不是UTF8(在Java中是惯用的)。 作者JACOB当然没有制作过的小怪物 在Wide char中从UTF8(在Java中采用)转换。但我认为 COM中的国家名称不常见。包括我想尝试一下 用Java来转换1251中的UTF字符串。显然工作 仅适用于Windows,其中ANSI编码为1251,即默认值 characterset =俄罗斯
最初是俄语:
МакросA2WпреобразуетданныеизANSIкодировкиWindowsвFrancchar。 Отсюдавывод,входныестрокадолжнасодержатьданныевANSIкодировки Windows(скореевсего1251),аНЕвUTF8(какпринятовJava)。
АвторыJACOBконечнонемногоуроды,чтоНЕсделалипреобразованиеиз UTF8(принятойвJava)в宽字符。 Но,думаю,национальныеименав COMнетакчастовстречаются。
Т.ч。 ябыпопробывалпросторукамивJavaпреобразоватьстрокуизUTF 1251.Понятноедело,чтоработатьбудеттольконаWindows,гдев качествеANSIкодировкистоит1251,т.е。默认字符集= 俄语。
因此,默认情况下,Java使用UTF-8,但Windows,因此Jakob使用cp1251。因此,转换用户名,如果Character.UnicodeBlock.CYRILLIC
,则转换为UTF-8
到cp1251
。
免责声明,我不确定Google翻译人员翻译网页有多好......
使用UnicodeBlock更新,确定字符类型,有关UnicodeBlocks的更多信息,请参阅http://docs.oracle.com/javase/7/docs/api/java/lang/Character.UnicodeBlock.html
//XXX over simplification, for it can also be CJK (Chinese Japanese Korean) or other...
public String hasCyrillicCharacters(final String text){
final char[] cc = text.toCharArray();
for (char c : cc) {
if (UnicodeBlock.CYRILLIC == UnicodeBlock.of(c)) {
return true;
}
}
return false;
}