Java(雅各布)+俄语

时间:2015-07-29 12:02:50

标签: java wmi jacob

我一直在用Java jacob编写Java程序,这有助于与wmi一起工作。面对这样的问题,团队不在西里尔语中工作。

   String userName = Dispatch.get(dItem2, "Name").getString();
   String objUser = "WinNT://IUMAG/" + userName + ",user";
   Dispatch dServ2 = new Dispatch(objUser);

如果用户名是用俄语写的,则会出现错误,如果是英语,那么一切都很好 我该如何解决这个问题?

1 个答案:

答案 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-8cp1251

免责声明,我不确定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;
}