2010-05-31 9 views

risposta

16

Che sarebbe qualcosa come le seguenti:

public static String fromCharCode(int... codePoints) { 
    StringBuilder builder = new StringBuilder(codePoints.length); 
    for (int codePoint : codePoints) { 
     builder.append(Character.toChars(codePoint)); 
    } 
    return builder.toString(); 
} 

Si noti che la fusione a char non è garantito a lavorare perché la il valore del punto di codice potrebbe superare il limite superiore di char (65535). Il char è stato creato nelle epoche scure di Java quando lo Unicode 3.1 non era ancora uscito e supera i 65535 caratteri.

Aggiornamento: il String ha effettivamente a constructor taking an int[] (introdotto dal Java 1.5, non si sapeva che dalla parte superiore della testa), che gestisce in modo corretto questo problema. Quanto sopra potrebbe essere semplificata come segue:

public static String fromCharCode(int... codePoints) { 
    return new String(codePoints, 0, codePoints.length); 
} 
+0

+1 per la perfezione Unicode, ma dubito che la funzione JavaScript può gestire correttamente Codepoints più grande di 65536. –

+0

Questo sembra funzionare per la maggior parte valori. Sto cercando: new String (new int [] {141}, 0, 1) che in javascript stampa, "?" ma in Java no. 141 è valido? Sto cercando di eseguire il debug di un codice di offuscamento che ho portato da Javascript a Java e sto ottenendo risultati incoerenti per alcuni personaggi. – jon077

+0

Dipende dalla codifica dei caratteri che è una storia completamente diversa. L'ambiente JS utilizza apparentemente una diversa codifica dei caratteri rispetto all'ambiente Java. Almeno, quanto sopra dovrebbe funzionare perfettamente per una codifica di caratteri Unicode come UTF-8. – BalusC

Problemi correlati