2015-06-19 15 views
6

Supponendo che ho un foo stringa = "Questa è una mela"Convert String al suo punto di codice Unicode

Il punto di codice Unicode equivalente sarà

"\\x74\\x68\\x69\\x73.......... \\x61\\x70\\x70\\x6c\\x65"

T h i s ............. a p p l e 

Come convertire da String foo

a

String "\\x74\\x68\\x69\\x73.......... \\x61\\x70\\x70\\x6c\\x65"

+0

Ecco un modo per farlo con ogni singolo personaggio ... può orientare nella giusta direzione: http: //www.java2s. com/tutorial/Java/0120__Development/Convertsthestringtot heunicodeformat.htm – CubeJockey

+0

Non dovrebbe la prima parte della stringa convertita essere \\ x54? – JamesB

+0

Questo potrebbe aiutare: http://www.java2s.com/Code/Java/I18N/ConvertintoHexadecimalnotationofUnicode.htm – JamesB

risposta

1

provare questo ..

 public static String generateUnicode(String input) { 
      StringBuilder b = new StringBuilder(input.length()); 
      for (char c : input.toCharArray()) { 

       b.append(String.format("\\u%04x", (int) c)); 

      } 
      return b.toString(); 
     } 
+0

char non è punto di codice (anche se la maggior parte delle volte è) – njzk2

+0

non esiste una cosa come 'UTF-16' codepoint. I codepoint Unicode sono valori individuali di caratteri. 'UTF-16' è una codifica del punto di codice che utilizza almeno 2 byte. I punti codice nei piani bassi sono codificati utilizzando i loro valori esatti. (da qui la comune confusione tra i 2). Gli aerei supplementari usano coppie surrogate, il che rende le cose un po 'più complicate – njzk2

+1

che funzionerà nella maggior parte dei casi. Il caso in cui non funziona è se ci sono coppie surrogate usate (solo caratteri molto rari), perché nel BMP (piano multilingue di base), la codifica definita da utf-16 è semplicemente quella di utilizzare il punto di codice semplice su 2 byte. – njzk2

0

Ecco un frammento di codice di lavoro di effettuare la conversione:

public class HexTest { 

    public static void main(String[] args) { 

     String testStr = "hello日本語 "; 

     System.out.println(stringToUnicode3Representation(testStr)); 
    } 

    private static String stringToUnicode3Representation(String str) { 
     StringBuilder result = new StringBuilder(); 
     char[] charArr = str.toCharArray(); 
     for (int i = 0; i < charArr.length; i++) { 
      result.append("\\u").append(Integer.toHexString(charArr[i] | 0x10000).substring(1)); 
     } 
     return result.toString(); 
    } 
} 

che mostrano:

\ u0068 \ u0065 \ u006c \ u006c \ u006f \ u65e5 \ u672c \ u8a9e \ u 0020

Se si desidera eliminare gli zeri supplementari, è necessario elaborarlo come descritto in here.

Ecco un'altra versione per eseguire la conversione, passando "This is an apple" si ottiene

U54 \ u68 \ U69 \ U73 \ U20 \ U69 \ U73 \ U20 \ U61 \ U6E \ U20 \ U61 \ U70 \ \ U70 \ u6c \ U65

utilizzando:

private static String str2UnicodeRepresentation(String str) { 
    StringBuilder result = new StringBuilder(); 
    for (int i = 0; i < str.length(); i++) { 
     int cp = Character.codePointAt(str, i); 
     int charCount = Character.charCount(cp); 
     //UTF characters may use more than 1 char to be represented 
     if (charCount == 2) { 
      i++; 
     } 
     result.append(String.format("\\u%x", cp)); 
    } 
    return result.toString(); 
} 
Problemi correlati