简体   繁体   English

如何将十六进制值转换为特殊字符(Unicode)?

[英]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" “ㅂ”的十六进制值为“e38582”

Now I've got hex value in String.现在我在字符串中有十六进制值。

String hex = "e38582";字符串十六进制 = "e38582";

How to convert this hex value to get the special char.( In this example it's "ㅂ" )如何转换此十六进制值以获取特殊字符。(在此示例中为"ㅂ"

I've tried this, but getting IllegalFormatConversionException :我试过这个,但得到 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 :mkyong 的博客试试这个方法:

  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? 使用 Java 将十六进制转储的字符串表示形式转换为字节数组?

  2. Interpret the byte array with the correct encoding (based on your previous question, UTF-8):用正确的编码解释字节数组(基于您之前的问题,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.这是我编写的一些代码,它会将您的十六进制字符串转换为 Java utf16 代码单元。 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.然后可以将代码单元输入到诸如您的 Web 浏览器或 Android 中的 EditText 视图之类的东西中,并且将为您完成到字符的转换。

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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