有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (2) 个答案

  1. # 1 楼答案

    你不能可靠地做到这一点

    Unicode字符可以在U+0000到U+10FFFF的任何代码点进行编码

    因此,我们无法知道输入中一次有多少个字符应该被解析为Unicode代码点的十六进制数

    子字符串>;代码点整数>StringBuilder#appendCodePoint>String

    如果您确定输入应该一次解析两个字符,请使用String#substring检索每对字符。使用Integer.parse解析每一对

    int codePoint = Integer.parseInt( hexInput ,16 ) ;
    

    使用^{}建立结果

    String hexString = "6a6f65";
    StringBuilder builder = new StringBuilder();
    for ( int i = 0 ; i < hexString.length() ; i += 2 ) {
        String substring = hexString.substring( i , i + 2 );
        int codePoint = Integer.parseInt( substring , 16 );
        builder.appendCodePoint( codePoint );
    }
    String result = builder.toString();
    

    看到这个code run live at IdeOne.com.

    result = joe
    

    警告:如果此类输入来自UTF-8编码文本,这种方法不可靠。这种文本可以使用1、2、3或4个八位字节的数据来表示任何一个字符。如果您的输入确实是UTF-8编码的文本,那么您应该对其进行解析

    溪流

    我并不建议在这种情况下这样做,但您可以使用streams

    StringBuilder builder = new StringBuilder();
    String input = "6a6f65";
    IntStream.iterate( 0 , ( x ) -> x < input.length() , i -> i + 2 ).forEach( i -> builder.appendCodePoint( Integer.parseInt( input.substring( i , i + 2 ) , 16 ) ) );
    System.out.println( "builder = " + builder );
    

    builder = joe

  2. # 2 楼答案

    如果可以确定十六进制字符串来自正确UTF-8编码字符串的字节数组,则只需执行以下操作:

    1. 将十六进制字符串转换回字节数组
    2. 将字节数组进一步转换回字符串,当然要使用正确的编码

    第一部分,有多种方法可以做到这一点。看看this question然后挑一个适合你需要的

    从十六进制字符串中获取字节数组后,请执行以下操作:

    String s = new String(bytearr, StandardCharsets.UTF_8);