2016-09-08 2 views

Répondre

1

vous pouvez utiliser un morceau de code comme ceci:

String str = myString.split(" ")[0]; 
str = str.replace("\\",""); 
String[] arr = str.split("u"); 
String text = ""; 
for(int i = 1; i < arr.length; i++){ 
    int hexVal = Integer.parseInt(arr[i], 16); 
    text += (char)hexVal; 
} 

ou vous pouvez utiliser Apache Commons Lang:

import org.apache.commons.lang.StringEscapeUtils; 

@Test 
public void testUnescapeJava() { 
    String sJava="\\u0048\\u0065\\u006C\\u006C\\u006F"; 
    System.out.println("StringEscapeUtils.unescapeJava(sJava):\n" + StringEscapeUtils.unescapeJava(sJava)); 
} 


output: 
StringEscapeUtils.unescapeJava(sJava): 
Hello 
1

Vous pouvez analyser les octets en utilisant le UTF_16 charset:

Par exemple

byte[] data = {0x06, 0x28}; 
String string = new String(data, StandardCharsets.UTF_16); 

Vous pouvez trouver les évasions en utilisant une expression régulière

private static Pattern ESCAPE_PATTERN = Pattern.compile("\\\\u([0-9a-fA-F]{2})([0-9a-fA-F]{2})"); 

public static String replaceCharEscapes(String input) { 
    Matcher m = ESCAPE_PATTERN.matcher(input); 
    if (!m.find()) { 
     return input; 
    } 
    StringBuilder outputBuilder = new StringBuilder(input.subSequence(0, m.start())); 
    int lastEnd = m.end(); 
    outputBuilder.append(getChar(m)); 

    while (m.find()) { 
     outputBuilder.append(input.subSequence(lastEnd, m.start())) 
       .append(getChar(m)); 
     lastEnd = m.end(); 
    } 

    if (lastEnd != input.length()) { 
     outputBuilder.append(input.subSequence(lastEnd, input.length())); 
    } 

    return outputBuilder.toString(); 
} 

private static String getChar(Matcher m) { 
    return new String(new byte[] { 
     Byte.parseByte(m.group(1), 16), 
     Byte.parseByte(m.group(2), 16), 
    }); 
} 

exemple:

replaceCharEscapes("\\u0043:\\\\u0050\\u0072\\u006f\\u0067\\u0072\\u0061\\u006ds") 

retours C:\Programs