简体   繁体   中英

How to convert hex value to Special Char( in Unicode )?

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 frommkyong'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();

}

  1. Convert the hex to byte array. Convert a string representation of a hex dump to a byte array using Java?

  2. Interpret the byte array with the correct encoding (based on your previous question, UTF-8):

     String output = new String(bytes, "UTF-8");

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);
}
val hex = "f135"
val char = hex.toLong(16).toChar()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM