2017-12-21 1 views
1

Der Titel erklärt alle, auch, habe ich versucht, das Entfernen sieJaunt Java getText() gibt den richtigen Text zurück, aber mit vielen "?"

(weil der Text da ist, aber statt „aldo“ gibt es „al? Tun“, auch scheint es ein zufälliges Muster zu haben)

mit (String).replace("?", ""), aber ohne Erfolg.

Ich habe dies auch mit einer Kombination von UTF_8, UTF_16 und ISO-8859, mit keinem Erfolg verwendet.

byte[] ptext = tempName.getBytes(UTF_8); 
String tempName1 = new String(ptext, UTF_16); 

Ein Beispiel dafür, was ich erhalte:

Studded Regular Sweatshirt   // Instead of this 
S?tudde?d R?eg?ular? Sw?eats?h?irt // I get this 

Könnte es die Website, die die Maden Browser bemerkt und versucht, seinen Inhalt zu „Spoof“? Wie kann ich das überwinden?

+7

Sieht aus wie eine Codierung Problem. Löschen Sie nicht nur diese Zeichen, sondern beheben Sie das Problem mit der Codierung. – tadman

+0

@tadman Ich habe einen Befehl auf Chrome verwendet, um zu überprüfen, welche Kodierung die Website verwendet, aber es ist die Standardeinstellung mit Auszeit. Ersetzen Sie auch das "?" funktioniert nicht. –

+1

@ JaneS. Das liegt daran, dass Sie es als '?' sehen, aber das könnte nur ein Standardzeichen sein, das angezeigt wird, wenn das tatsächliche Zeichen nicht angezeigt werden kann. Wenn Sie also den Austausch vornehmen, konzentrieren Sie sich nicht auf das Problem. Hören Sie, was @tadman gesagt hat, und beheben Sie das Codierproblem – smac89

Antwort

0

Es sieht sehr wahrscheinlich aus, dass die Website, die Sie verschrottet Absicht die 3f und 64 Zeichen in Ihr Ergebnis mischen. so maskieren Sie sich selbst als normaler Browser zu verschrotten oder filter es durch Ersetzen.

Text einfach

Sca???rfa???ce??? E???mbr???oi�d???ered L�e???athe 

nach filteration

Scarface Embroidered Leather 




//Sca???rfa???ce??? E???mbr???oi�d???ered L�e???athe 
//Scarface Embroidered Leathe 

String hex="5363613f3f3f7266613f3f3f63653f3f3f20453f3f3f6d62723f3f3f6f69‌​643f3f3f65726564204c‌​653f3f3f61746865"; 
byte[] bytes= hexStringToBytes(hex); 

//the only line you need 
String res = new String(bytes,"UTF-8").replaceAll("\\\u003f","").replaceAll('�',"").replaceAll("�",""); 

private static byte charToByte(char c) { 
    return (byte) "ABCDEF".indexOf(new String(c)); 
} 


public static byte[] hexStringToBytes(String hexString) { 
    if (hexString == null || hexString.equals("")) { 
     return null; 
    } 
    hexString = hexString.toUpperCase(); 
    int length = hexString.length()/2; 
    char[] hexChars = hexString.toCharArray(); 
    byte[] d = new byte[length]; 
    for (int i = 0; i < length; i++) { 
     int pos = i * 2; 
     d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1])); 

    } 
    return d; 
} 

public static String bytesToHexString(byte[] src){ 
    StringBuilder stringBuilder = new StringBuilder(""); 
    if (src == null || src.length <= 0) { 
     return null; 
    } 
    for (int i = 0; i < src.length; i++) { 
     int v = src[i] & 0xFF; 
     String hv = Integer.toHexString(v); 
     if (hv.length() < 2) { 
      stringBuilder.append(0); 
     } 
     stringBuilder.append(hv); 
    } 
    return stringBuilder.toString(); 
} 

public String printHexString(byte[] b) { 
    String a = ""; 
    for (int i = 0; i < b.length; i++) { 
     String hex = Integer.toHexString(b[i] & 0xFF); 
     if (hex.length() == 1) { 
      hex = '0' + hex; 
     } 

     a = a+hex; 
    } 

    return a; 
} 
+0

Wenn jemand Probleme mit' charToByte' mit, verwenden Sie einfach 'String.valueOf (c)' statt 'new String (c)'. –

Verwandte Themen