2016-04-04 10 views
4

Ich habe nach Lösungen gesucht, aber es scheint nicht viel zu diesem Thema zu geben. Ich habe Lösungen gefunden, die darauf hinweisen:Wie kann ich UTF-16 in UTF-32 in Java konvertieren?

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

für von UTF-8 zu konvertieren utf16 jedoch java nicht „UTF32“ nicht handhaben, die diese Lösung nicht umsetzbar macht. Weiß jemand anders, wie man das erreicht?

Antwort

2

nach der Suche habe ich dies funktioniert:

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

Froh, dass Sie eine funktionierende Lösung gefunden haben! Entschuldigung dafür, dass ich mein Versprechen nicht eingehalten habe: P Ich habe an meinem Code gearbeitet, stieß aber auf seltsame Probleme, die ich auf anderen Systemen nicht reproduzieren konnte. Meine Idee beinhaltete auch die Verwendung von 'codePointAt()' und es war im Allgemeinen ziemlich ähnlich (nur für den Fall, dass Sie neugierig waren). – rhino

+0

es ist ok, danke, dass Sie sich die Mühe gemacht haben –

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 tut verarbeiten UTF-32, versuchen, diesen Test

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

es zeigen, dass Arrays' lentgh = 4

+0

Dann wie würde ich die Konvertierung machen, da es für mich nicht funktioniert? –

+0

@DanielMedina [Gemäß den Dokumenten] (https://docs.oracle.com/javase/8/docs/api/java/nio/charset/Charset.html) ist UTF-32 nicht garantiert vorhanden alle Systeme; Es ist nicht einmal auf der Seite erwähnt. Warte, ich arbeite an einer Antwort für dich. – rhino

+0

Vielen Dank, ich schätze den Aufwand sehr! –

Verwandte Themen