繁体   English   中英

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

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

在我之前的问题中,我询问了特殊字符到十六进制的转换。

“ㅂ”的十六进制值为“e38582”

现在我在字符串中有十六进制值。

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

如何转换此十六进制值以获取特殊字符。(在此示例中为"ㅂ"

我试过这个,但得到 IllegalFormatConversionException :

String hex = "e38582";
BigInteger value = new BigInteger(hex, 16);
String str = String.format("%c", value );
System.out.println("String : "+ str);

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

  2. 用正确的编码解释字节数组(基于您之前的问题,UTF-8):

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

这是我编写的一些代码,它会将您的十六进制字符串转换为 Java utf16 代码单元。 然后可以将代码单元输入到诸如您的 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