I have looked for solutions, but there doesn't seem to be much on this topic. I have found solutions that suggest:
String unicodeString = new String("utf8 here");
byte[] bytes = String.getBytes("UTF8");
String converted = new String(bytes,"UTF16");
for converting to utf16 from utf8, however, java doesn't handle "UTF32", which makes this solution unviable. Does anyone know any other way on how to achieve this?
Java does handle UTF-32, try this test
byte[] a = "1".getBytes("UTF-32");
System.out.println(a.length);
it will show that arrays' lentgh = 4
after searching I got this to work:
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;
}
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"));
来源:https://stackoverflow.com/questions/36393811/how-can-i-convert-utf-16-to-utf-32-in-java