In my previous question, I asked about conversion of Special Chars to Hex.
Hex value of "ㅂ" is "e38582"
Now I've got hex value in String.
String hex = "e38582";
How to convert this hex value to get the special char.( In this example it's "ㅂ" )
I've tried this, but getting IllegalFormatConversionException :
String hex = "e38582";
BigInteger value = new BigInteger(hex, 16);
String str = String.format("%c", value );
System.out.println("String : "+ str);
Try this method from mkyong's blog :
public String convertHexToString(String hex){
StringBuilder sb = new StringBuilder();
StringBuilder temp = new StringBuilder();
//49204c6f7665204a617661 split into two characters 49, 20, 4c...
for( int i=0; i<hex.length()-1; i+=2 ){
//grab the hex in pairs
String output = hex.substring(i, (i + 2));
//convert hex to decimal
int decimal = Integer.parseInt(output, 16);
//convert the decimal to character
sb.append((char)decimal);
temp.append(decimal);
}
System.out.println("Decimal : " + temp.toString());
return sb.toString();
}
Here is some code I've written, it will convert your hex string into Java utf16 code units. There code units can then be entered into something like your web browser or an EditText View in Android and the conversion to a Character will be done for you.
public static String convertHexToUnicode(String hex_value)
{
hex_value = "1f64c_1f3fb"; //Example value to try...
String[] array_hex_strings = TextUtils.split(hex_value, "_");
String final_unicode_value = "";
//------------------------------------------------------------------------------------------
for (int i=0; i < array_hex_strings.length; i++)
{
Log.i("People", "method(); array_hex_strings[i]: " + array_hex_strings[i]);
int decimal = Integer.parseInt(array_hex_strings[i], 16);
Log.i("People", "method(); decimal: " + decimal);
Log.i("People", "method(); Integer.toHexString(decimal): " + Integer.toHexString(decimal));
Log.i("People", "method(); Character.isValidCodePoint(decimal): " + Character.isValidCodePoint(decimal));
char[] codepoint_char_array = Character.toChars(decimal);
String combined_utf16_code_units = charArrayToUtf16CodeUnits(codepoint_char_array);
final_unicode_value = (final_unicode_value + combined_utf16_code_units);
Log.i("People", "unicode_value_evolving: " + final_unicode_value);
}
//------------------------------------------------------------------------------------------
Log.i("People", "final_unicode_value: " + final_unicode_value);
return final_unicode_value;
}
public static String charArrayToUtf16CodeUnits(char[] char_array)
{
/*Utf16 code units are also known as Java Unicode*/
System.out.println("People; array.length: = " + char_array.length);
String full_unicode_value = "";
//------------------------------------------------------------------------------------------
for (int i = 0; i < char_array.length; i++)
{
System.out.println("array char: " + "[" + i + "]" + " converted to hex" + " = " + charToHex(char_array[i]));
full_unicode_value = (full_unicode_value + "\\" + "u" + charToHex(char_array[i]));
}
//------------------------------------------------------------------------------------------
Log.i("People", "full_unicode_value: " + full_unicode_value);
return full_unicode_value;
}
static public String charToHex(char c)
{
//Returns hex String representation of char c
byte hi = (byte) (c >>> 8);
byte lo = (byte) (c & 0xff);
return byteToHex(hi) + byteToHex(lo);
}