Frage bearbeitet wurde, während ich reagiere, zusätzlicher Code ist folgende und funktionieren soll (mit Code meines Hex-Konvertierung):
//Inefficient, but functional, does not test if input is in hex charset, so somewhat unsafe
//NOT tested, but should be functional
public static String encodeURL(String hexString) throws Exception {
if(hexString==null || hexString.isEmpty()){
return "";
}
if(hexString.length()%2 != 0){
throw new Exception("String is not hex, length NOT divisible by 2: "+hexString);
}
int len = hexString.length();
char[] output = new char[len+len/2];
int i=0;
int j=0;
while(i<len){
output[j++]='%';
output[j++]=hexString.charAt(i++);
output[j++]=hexString.charAt(i++);
}
return new String(output);
}
Sie werden das rohe Bytes hexadezimale Zeichen konvertieren müssen oder was auch immer URL-freundliche Codierung, die sie verwenden. Base32- oder Base64-Kodierungen sind möglich, aber gerade hexadezimale Zeichen sind am häufigsten. URLEncoder wird für diese Zeichenfolge nicht benötigt, da sie keine Zeichen enthalten darf, die eine URL-Codierung in% NN-Format erfordern.
unten Die wird Bytes für einen Hash (SHA-1, MD5SUM, etc.) in eine hexadezimale Zeichenfolge konvertieren:
/** Lookup table: character for a half-byte */
static final char[] CHAR_FOR_BYTE = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
/** Encode byte data as a hex string... hex chars are UPPERCASE*/
public static String encode(byte[] data){
if(data == null || data.length==0){
return "";
}
char[] store = new char[data.length*2];
for(int i=0; i<data.length; i++){
final int val = (data[i]&0xFF);
final int charLoc=i<<1;
store[charLoc]=CHAR_FOR_BYTE[val>>>4];
store[charLoc+1]=CHAR_FOR_BYTE[val&0x0F];
}
return new String(store);
}
Dieser Code ziemlich optimiert und schnell, und ich benutze es für meine eigenen SHA -1 Byte Kodierung. Beachten Sie, dass Sie mit der String.toLowerCase() -Methode möglicherweise Großbuchstaben in Kleinbuchstaben konvertieren müssen, je nachdem, welche Form der Server akzeptiert.
ich meinen Beitrag bearbeitet habe neuen Code enthält Ihre editierten Frage zu beantworten. – BobMcGee