2016-04-04 11 views
4

Я искал решения, но, похоже, на эту тему не так много. Я нашел решение, предполагающую:Как конвертировать UTF-16 в UTF-32 в java?

String unicodeString = new String("utf8 here"); 
byte[] bytes = String.getBytes("UTF8"); 
String converted = new String(bytes,"UTF16"); 

для преобразования utf16 из utf8, однако, Java не обрабатывает «UTF32», что делает это решение нежизнеспособным. Кто-нибудь знает, как это сделать?

ответ

2

после поиска я получил эту работу:

public static String convert16to32(String toConvert){ 
     for (int i = 0; i < toConvert.length();) { 
      int codePoint = Character.codePointAt(toConvert, i); 
      i += Character.charCount(codePoint); 
      //System.out.printf("%x%n", codePoint); 
      String utf32 = String.format("0x%x%n", codePoint); 
      return utf32; 
     } 
     return null; 
    } 
+0

Рад, что вы нашли рабочее решение! Извините, что не выполнил свое обещание: P Я работал над своим кодом, но столкнулся с некоторыми проблемами, которые я не мог воспроизвести в других системах. Моя идея заключалась в использовании 'codePointAt()', а также, как правило, было очень похоже (на всякий случай вам было любопытно). – rhino

+0

его нормально спасибо за усилия, хотя –

1
public static char[] bytesToHex(byte[] raw) { 
    int length = raw.length; 
    char[] hex = new char[length * 2]; 
    for (int i = 0; i < length; i++) { 
     int value = (raw[i] + 256) % 256; 
     int highIndex = value >> 4; 
     int lowIndex = value & 0x0f; 
     hex[i * 2 + 0] = kDigits[highIndex]; 
     hex[i * 2 + 1] = kDigits[lowIndex]; 
    } 
    return hex; 
} 



byte[] bytearr = converted.getBytes("UTF-32"); 
System.out.println("With UTF-32 encoding:\t" + String.valueOf(bytesToHex(bytearr))); 
System.out.println("With UTF-32 decoding:\t" + new String((bytearr), "UTF-32")); 
2

Java делает обрабатывать UTF-32, попробуйте этот тест

byte[] a = "1".getBytes("UTF-32"); 
    System.out.println(a.length); 

это покажет, что lentgh массивы = 4

+0

Тогда как бы я сделал преобразование, так как он не работает для меня? –

+0

@ DanielMedina [Согласно документам] (https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html), UTF-32 не гарантируется наличие на все системы; его даже не упоминают на странице. Подожди, я работаю над ответом. – rhino

+0

Спасибо, я очень ценю усилие –