2015-07-29 5 views
0

Я писал программу на Java с библиотекой jacob, которая помогает работать с wmi. и столкнувшись с такой проблемой, команда не работает на кириллице.Java (Jacob) + Русский

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

Если имя пользователя написано на русском языке, то есть ошибка, и если английский язык, то все в порядке Как я могу решить эту проблему?

+1

Проверьте вы кодирующий ... UTF-8 поддерживает кириллицу (и любой другой текст, который вы получили). Windows по умолчанию - CP1251/cp1252? ... Вы можете попробовать перевести текст в байт [], а затем вернуться к 'new String (byteArray,« UTF-8 »)', когда вы печатаете это, вы должны увидеть кириллицу – Danielson

+0

Я попробовал , не работает :( – AsmaRod

+0

Ok ... Во-первых, какова ошибка? И каковы персонажи, которые вы получаете? (Извините за текст, я не знаю, что это значит) 'Кириллон алфавит' или' Ðи ÑиР»Ð РРРРРРРиÑ'? Или вы получаете неизвестный символ' ' Unicode?(перевод того, что я написал, кажется, не оскорбительный, красивый) – Danielson

ответ

0

Я думаю, что ответ идет на (для английского языка) от http://www.sql.ru/forum/1167615/java-jacob-rabota-s-kirillicey:

Macro A2W преобразует данные из кодировки ANSI в Windows, Wide полукокса. Следовательно, вывод: строка ввода должна содержать данные в кодировке ANSI Windows (возможно, в 1251), но не в UTF8 (как это принято на Java). Авторы JACOB курс маленьких монстров, которые не сделали преобразование из UTF8 (принятое на Java) в Wide char. Но я думаю, что национальных имен в COM не так распространены. в том числе и я хотел бы попробовать руку в Java, чтобы преобразовать строку из UTF в 1251 Очевидно, что работа только на Windows, где в качестве кодировки ANSI является 1251, то есть по умолчанию = русских кодировке символов

Первоначально на русском языке:

Макрос A2W преобразует данные из ANSI кодировки Windows в Wide char. Окно, входная строка должна содержать данные ANSI кодировки Windows (скорее всего 1251), а НЕ в UTF8 (как принято в Java).

Авторы JACOB конечно немного уроды, что НЕ сделали преобразование из UTF8 (принятой в Java) в Wide char. Но, думаю, национальные имена COM не так часто встречаются.

Т.ч. я бы попробывал просто руками в Java преобразовать строку из UTF в 1251. Пользование ANSI кодировки стоит 1251, т.е. Default characterset = Russian.

Так, Java по умолчанию использует UTF-8, но Windows, следовательно, Jakob использует cp1251. Поэтому конвертируйте имя пользователя, если Character.UnicodeBlock.CYRILLIC затем конвертировать из UTF-8 в cp1251.

Отказ от ответственности, я не уверена, насколько хорошо переводчики Google перевели страницы ...

Update, используя UnicodeBlock для определения типа символов, см http://docs.oracle.com/javase/7/docs/api/java/lang/Character.UnicodeBlock.html для получения дополнительной информации о UnicodeBlocks

//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; 
} 
+0

Character.UnicodeBlock.CYRILLIC Что это? Скажите, как использовать его, пожалуйста? – AsmaRod

+0

См. Последнюю часть обновленного ответа ... Если вы хотите использовать другие наборы символов (обратите внимание, что я не уверен в отображении cp1251!), Вы можете протестировать другой UnicodeBlock – Danielson

+0

К сожалению, это не работает – AsmaRod