Converti stringa internazionale in \ u Codici in java

Come posso convertire una stringa internazionale (ad es. Russa) in \u numeri (numeri unicode)
es. \u041e\u041a per OK ?

Nel caso in cui sia necessario scrivere un file .properties , è sufficiente aggiungere le stringhe in un object Properties e quindi salvarlo in un file. Si prenderà cura della conversione.

c’è uno strumento JDK eseguito tramite riga di comando come segue:

 native2ascii -encoding utf8 src.txt output.txt 

Esempio :

src.txt

 بسم الله الرحمن الرحيم 

output.txt

 \u0628\u0633\u0645 \u0627\u0644\u0644\u0647 \u0627\u0644\u0631\u062d\u0645\u0646 \u0627\u0644\u0631\u062d\u064a\u0645 

Se si desidera utilizzarlo nella propria applicazione Java, è ansible racchiudere questa riga di comando:

 String pathSrc = "./tmp/src.txt"; String pathOut = "./tmp/output.txt"; String cmdLine = "native2ascii -encoding utf8 " + new File(pathSrc).getAbsolutePath() + " " + new File(pathOut).getAbsolutePath(); Runtime.getRuntime().exec(cmdLine); System.out.println("THE END"); 

Quindi leggi il contenuto del nuovo file.

È ansible utilizzare escapeJavaStyleString da org.apache.commons.lang.StringEscapeUtils .

Ho anche avuto questo problema. Avevo del testo in portoghese con alcuni caratteri speciali, ma questi caratteri erano già in formato Unicode (es .: \u00e3 ).

Quindi voglio convertire S\u00e3o in São .

L’ho fatto usando il comando apache StringEscapeUtils . Come ha detto @ sorin-sbarnea. Può essere scaricato qui

Usa il metodo unescapeJava , come questo:

 String text = "S\u00e3o" text = StringEscapeUtils.unescapeJava(text); System.out.println("text " + text); 

(C’è anche il metodo escapeJava , ma questo mette i caratteri unicode nella stringa.)

Se qualcuno conosce una soluzione su Java puro, ti preghiamo di comunicarcelo.

Ecco una versione migliorata della risposta di ArtB :

  StringBuilder b = new StringBuilder(); for (char c : input.toCharArray()) { if (c >= 128) b.append("\\u").append(String.format("%04X", (int) c)); else b.append(c); } return b.toString(); 

Questa versione sfugge a tutti i caratteri non ASCII e funziona correttamente per punti di codice Unicode bassi come Ä .

Ci sono tre parti per la risposta

  1. Ottieni l’Unicode per ogni personaggio
  2. Determina se è nella pagina cirillica
  3. Converti in esadecimale.

Per ottenere ciascun carattere è ansible scorrere la stringa usando i charAt() o toCharArray() .

 for( char c : s.toCharArray() ) 

Il valore del char è il valore Unicode.

I caratteri Unicode cirillico sono tutti i caratteri nei seguenti intervalli:

 Cyrillic: U+0400–U+04FF ( 1024 - 1279) Cyrillic Supplement: U+0500–U+052F ( 1280 - 1327) Cyrillic Extended-A: U+2DE0–U+2DFF (11744 - 11775) Cyrillic Extended-B: U+A640–U+A69F (42560 - 42655) 

Se è in questa gamma è cirillico. Basta eseguire un controllo in caso. Se è nell’intervallo, utilizzare Integer.toHexString() e anteporre "\\u" . Messo insieme dovrebbe assomigliare a questo:

 final int[][] ranges = new int[][]{ { 1024, 1279 }, { 1280, 1327 }, { 11744, 11775 }, { 42560, 42655 }, }; StringBuilder b = new StringBuilder(); for( char c : s.toCharArray() ){ int[] insideRange = null; for( int[] range : ranges ){ if( range[0] <= c && c <= range[1] ){ insideRange = range; break; } } if( insideRange != null ){ b.append( "\\u" ).append( Integer.toHexString(c) ); }else{ b.append( c ); } } return b.toString(); 

Modifica: probabilmente dovrebbe fare il controllo c < 128 e invertire i corpi if e else ; probabilmente dovresti sfuggire a tutto ciò che non è ASCII. Probabilmente ero troppo letterale nella lettura della tua domanda.