0

たとえば、次のパーセントでエンコードされた文字を含む URL があるとしましょう: %80
これは明らかに ASCII 文字ではありません。
この値を Java の対応する 16 進文字列に変換するにはどうすればよいでしょうか。運が悪かったので、次のことを試しました。結果は80になるはずです。

    public static void main(String[] args) {
        System.out.print(byteArrayToHexString(URLDecoder.decode("%80","UTF-8").getBytes()));
    }
    public static String byteArrayToHexString(byte[] bytes)
    {
      StringBuffer buffer = new StringBuffer();
      for(int i=0; i<bytes.length; i++)
      {
        if(((int)bytes[i] & 0xff) < 0x10)
        buffer.append("0");
        buffer.append(Long.toString((int) bytes[i] & 0xff, 16));
      }
      return buffer.toString();
  }
4

2 に答える 2

3

これに対処する最善の方法は、java.net.URLまたはを使用して URL を解析しjava.net.URI、関連する getter を使用して必要なコンポーネントを抽出することです。これらは、% でエンコードされた部分を適切な方法でデコードします。

あなたの現在のアイデアの問題は、 、または%80を表していないことです。むしろ、URL の文字エンコーディングのコンテキストでさらに解釈する必要があるバイトを表します。また、エンコーディングが UTF-8 の場合は、% でエンコードされた 1 つか 2 つのバイトが後に続く必要があります。それ以外の場合、これは不正な形式の UTF-8 文字表現です。"80"80%80

于 2011-12-27T14:12:04.807 に答える
1

あなたが何をしようとしているのか、私にはよくわかりません。しかし、私はそれを試してみます。

  • この String:を取得していて、 string"%80"を取得したい場合は、次のように使用できます。 "80"

    String str = "%80";
    String hex = str.substring(1); // Cut off the '%'
    
  • そこから値 0x80( 12810 進数)を抽出しようとしている場合:

    String str = "%80";
    String hex = str.substring(1); // Cut off the '%'
    int value = Integer.parseInt(hex, 16);
    
  • int を 16 進数表現に変換しようとしている場合は、次のようにします。

    String hexRepresenation = Integer.toString(value, 16);
    
于 2011-12-27T14:08:08.437 に答える