2015-10-15 3 views
1

Мне нужно закодировать строку java для UCS, как «h», «0068»Кодировать строку в UCS2

например. У меня есть тестовая установка

@Test 
public void testEncodeAsUCS2_string1() throws Exception { 
    String encoded = sendRequestTransformer.encodeAsUCS2("hello"); 
    Assert.assertEquals("00680065006C006C006F", encoded); 
} 

поэтому этот тест позволяет узнать, было ли успешным преобразование, например. hello должен вернуться 00680065006C006C006F

В моем коде у меня есть следующее преобразование, которое, как я знаю, неверно, поскольку оно печатает [B @ 742cb491. (Этот метод toString для класса Object возвращает строку, состоящую из имени класса, объектом которого является экземпляр, символа at-sign `@ 'и шестизначного шестнадцатеричного представления хеш-кода объекта без знака)

мне нужна помощь с переводом

String encodeAsUcx2(String messageContent){ 

          try { 
              messageContent.getBytes("UTF-16LE"); 
          } catch (UnsupportedEncodingException e) { 
              e.printStackTrace(); 
          } 
          return String.valueOf(messageContent.getBytes()); 

      } 

Как бы я идти об этом?

ответ

1

После преобразования вашего сообщения в byte[] вам просто нужно выполнить цикл и преобразовать каждый byte в шестнадцатеричное представление и построить новый String по мере того, как вы идете.

Например, вы могли бы сделать что-то вроде этого:

static String encodeAsUcs2(String messageContent) throws UnsupportedEncodingException { 
    byte[] bytes = messageContent.getBytes("UTF-16LE"); 

    StringBuilder sb = new StringBuilder(); 
    for (byte b : bytes) { 
     sb.append(String.format("%02X", b)); 
    } 

    return sb.toString(); 
} 

я должен отметить, однако, что это вернет "680065006C006C006F00", а не "00680065006C006C006F" при кодировании "hello".

Чтобы получить ожидаемый результат, вам нужно будет использовать кодировку big-endian ("UTF-16BE").

+0

Спасибо, что работает на нормальные английские слова, но у меня проблема с разными словами на разных языках. Это приводит к тому, что буквы выводятся как FFFD, который используется для указания, когда система не может отобразить поток данных на символ corect – user3520080

+0

@ user3520080 Можете ли вы привести пример? Возможно, вы пытаетесь закодировать что-то, не поддерживаемое UTF-16, и нужно использовать одну из [поддержки других кодировок Java] (https://docs.oracle.com/javase/8/docs/technotes/ guide/intl/encoding.doc.html). – azurefrog

Смежные вопросы