【问题标题】:Java(Jacob) + Russian languageJava(Jacob) + 俄语
【发布时间】:2015-07-29 12:02:49
【问题描述】:

我一直在用库 jacob 编写一个 Java 程序,它有助于使用 wmi。并且面对这样的问题,团队不使用西里尔文。

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

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

【问题讨论】:

  • 检查你的编码... UTF-8 支持 Cyrilic(以及你得到的任何其他文本)。 Windows 默认是 CP1251 /cp1252?... 您可以尝试将文本转换为 byte [] ,然后在打印时返回 new String(byteArray, "UTF-8"),您应该会看到 Cyrillic
  • 我试过了,没用:(
  • 好的...首先,错误是什么?你得到的字符是什么? (文字抱歉,不知道下面是什么意思)Кириллон алфавит还是ÐиÑиллон алÑавиÑ?或者你得到 Unicode 未知字符? (翻译我写的,好像没有冒犯,不错)
  • > 线程“主”com.jacob.com.ComFailException 中的异常:在 com.jacob.com.Dispatch 的 com.jacob.com.Dispatch.createInstanceNative(Native Method) 中找不到名字对象.(Dispatch.java:99) at javaapplication20.TestMain.main(TestMain.java:43) Java 结果:1 我使用俄语,例如:“Администратор”

标签: java wmi jacob


【解决方案1】:

我认为答案来自http://www.sql.ru/forum/1167615/java-jacob-rabota-s-kirillicey(对于说英语的人):

Macro A2W 将数据从 ANSI 编码转换为 Windows Wide char。因此 结论,输入行应包含 ANSI 编码的数据 Windows(可能在 1251 年),但不是 UTF8(Java 中的习惯)。 作者JACOB课程小怪兽未制作 在 Wide char 中从 UTF8(在 Java 中采用)转换。但我认为 COM 中的国家名称并不常见。包括我想尝试一个 手把手Java在1251中转换一串UTF。很明显work 仅在 Windows 上,其中 ANSI 编码为 1251,即默认 字符集 = 俄语

俄语原文:

Макрос A2W преобразует данные из ANSI кодировки Windows в Wide char。 Отсюда вывод, входные строка должна содержать данные в 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;
}

【讨论】:

  • Character.UnicodeBlock.CYRILLIC 是什么?请告诉我如何使用它?
  • 查看更新答案的最后一部分...如果您希望使用其他字符集(注意我不确定 cp1251 映射!)您可以测试其他 UnicodeBlock
  • 我假设您尝试过用俄语搜索?我的俄语充其量是很差的。但是这个问题很可能是俄语或中文文档(如果比我建议的更多)?
  • @AsmaRod 顺便说一句(也许我猜错了),但如果他们会说这种语言,你可以尝试使用俄语 StackOverFlow ru.stackoverflow.com 和代码......问题(好的:))
  • 请再问一个问题。我是不是把 utf 改成了 windows-125,对吧?
猜你喜欢
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多