2012-02-21 2 views
1

文字列をUTF-8を使用してバイナリに変換する必要がありますが、できません。私はUTF-8エンコーディングを使用して文字列をバイナリに変換する

String encodedName=URLEncoder.encode(name, "UTF-8"); 

を試してみましたが、それは私のバイナリフォーマットを与えていない 、それはちょうど私のわずかな変化と同じ文字列を返された、助けてください。

編集:私は何をすべきか

: 私は、文字列と仮定する「HelloWorldの」 私は「UTF-8」を使用してバイナリに変換して、ハッシュアルゴリズムSHA1を使用する必要がありますを持っており、このことから私はしますハッシュキーを取得し、これは私が "ハッシュキー"が必要なものです。

これはSHA1ハッシュに対して1つ見つかりました。

public class AeSimpleSHA1 { 

    private String convertToHex(byte[] data) { 
     StringBuffer buf = new StringBuffer(); 
     for (int i = 0; i < data.length; i++) { 
      int halfbyte = (data[i] >>> 4) & 0x0F; 
      int two_halfs = 0; 
      do { 
       if ((0 <= halfbyte) && (halfbyte <= 9)) 
        buf.append((char) ('0' + halfbyte)); 
       else 
        buf.append((char) ('a' + (halfbyte - 10))); 
       halfbyte = data[i] & 0x0F; 
      } while(two_halfs++ < 1); 
     } 
     return buf.toString(); 
    } 

    public String SHA1(String text) 
    throws NoSuchAlgorithmException, UnsupportedEncodingException { 
    MessageDigest md; 
    md = MessageDigest.getInstance("SHA-1"); 
    byte[] sha1hash = new byte[40]; 
    md.update(text.getBytes("iso-8859-1"), 0, text.length()); 
    sha1hash = md.digest(); 
    return convertToHex(sha1hash); 

    } 

} 

答えて

1

それはあなたが何を意味するか、実際に明確ではないのですが、あなたは通常、使用したい:

byte[] data = name.getBytes("UTF-8"); 

あなたの試みでURLEncoderを使用していた理由は、私がわからない - または何あなたの「所望の結果"です。

EDIT:SHA1メソッドでgetBytes()を呼び出すことができるように、バイナリデータをテキストに変換するのは意味がありません。ちょうどあなたのハッシュ方式を変更行います

public String hashSha1(byte[] data) throws NoSuchAlgorithmException, 
    UnsupportedEncodingException { 
    MessageDigest md = MessageDigest.getInstance("SHA-1"); 
    md.update(data, 0, data.length); 
    return convertToHex(md.digest()); 
} 
+0

同じ方法で独自のエンコーディングを定義するかもしれませんが、バイナリ形式で、それは私の希望されたものであることあなたのコードは本当に役に立ちます、私はデータのコード化されたフォーマットを持っていますが、私は文字列としてそれを格納する必要があります、あなたは私を助けてください。 – droid

+0

@ user1211188:達成しようとしていることはまったく不明です。 'byte []'はバイナリデータ、 'String'はテキストデータです。あなたが何をしているのかを明確にしてください - http://tinyurl.com/so-hintsを読んで質問を編集してください。 –

+0

OK、UTF-8を使用して文字列をバイナリに変換したことを明確にすることができます。今ではデータがdata.Nowに格納されていますが、SHA1ハッシングアルゴリズムを使用する必要があります。私は別のエンコーディングの入力としてそれを与えることができるように、文字列です。 – droid

0

は、なぜあなたは単にUTF-8バイト配列に変換するには、文字列のgetBytes()メソッドを使用していけませんか?以下を参照:

String s = "this is my string"; 
byte[] bytes = s.getBytes(); // default: UTF-8 

デフォルトエンコーディングがUTF-8アンドロイドである、あなたはさらに、私はなっていませんでした

+1

私はUTF-8がAndroidのデフォルトのエンコーディングだとは思っていますが、私はまだそれについて明確にするのが理にかなっていると思います。 –

+0

@Jon Skeet:もしそうなら、明示的に(あたかもそれを気にしなければならないかのように)、デフォルトのUTF-8とAndroidプログラミングの原則(「Simplify My Life」)の意味に反します。 – TomeeNS

+0

@TomeeNS:私たちはこれに同意する必要はないと思う。 –

関連する問題