2015-08-26 34 views
5

Sto sviluppando un programma java che scrive l'output in un file di testo. Quando qualcosa va storto, devo mettere questo ASCII art:Problemi durante la scrittura di spigoli con le lettere ascii ¯ _ (ツ) _/¯ in testo normale con java

¯\_(ツ)_/¯ 

ho fatto con questo BufferedOutputStream:

errorOutput.writeln("##################################\n" 
        + "#####  Error Output  ######\n" 
        + "#####  ¯\\_(ツ)_/¯  ######\n" 
        + "##################################\n"); 

Il problema è che quando vedo il registro txt writted con Java ottengo questo:

################################## 
#####  Error Output ###### 
#####  ¯\_(ツ)_/¯  ###### 
################################## 

Come posso scrivere l'emoji ASCII corretto in Java?

+0

Come hai visto questo file di testo? Penso che sia una specie di problema da Unicode ad Ascii. Prova a visualizzarlo con le impostazioni Unicode (Notepad ++) – moffeltje

+0

nel navigatore (chrome) – NullPointerException

+0

Scambia la codifica del file in UTF-8, quale IDE stai usando? – IanGabes

risposta

0

risolto con questi frammenti di codice:

@GET 
    @Path("getStdErr/{idApp}") 
    @Produces("text/html; charset=UTF-8") 
    public Response getStdErr(@PathParam("idApp") Integer idApp) { 
     return super.getStderr(jobsMap.get(idApp)); 
    } 

. . . .

return Response.ok(job.getStdErr(), "text/plain; charset=UTF-8").build(); 
+0

Sarebbe 'getStdErr()' restituire l'emoji? – bphilipnyc

4

Il salvataggio del file .java come UTF-8 questo codice funziona per me:

String string = "##################################\n" 
      + "#####  Error Output  ######\n" 
      + "#####  ¯\\_(ツ)_/¯  ######\n" 
      + "##################################\n"; 
Charset.forName("UTF-8").encode(string); 
System.out.println(string); 

USCITA:

################################## 
#####  Error Output  ###### 
#####  ¯\_(ツ)_/¯  ###### 
################################## 

DEMO HERE.

+0

il problema è solo quando apro il file txt nel navigatore, chrome firefox ecc ... questa app java che sta eseguendo su un server in modo che il file di registro si apra in un navigatore – NullPointerException

+0

@ AndroidUser99 hai inviato le intestazioni per la pagina web? – Cosmin

+0

non è una pagina web, è solo un testo txt file – NullPointerException

2

il file è in UTF-8, ma si sta visualizzando in una codifica a singolo byte:

  • Stai visualizzando UTF-8 sequenze multi-byte per i caratteri speciali con un char per byte.

Assicurarsi di leggerlo come UTF-8, perché in effetti si utilizzano non ASCII, virgole, virgolette e giapponese. Quindi UTF-8 va bene.

Un trucco sporco sotto Windows potrebbe essere:

String string = "\uFEFF##... 

Questo scrive un carattere Unicode BOM, che quando viene il primo carattere di un file viene interpretato come marcatore Unicode.

Altrimenti creare un file HTML con charset specificato:

<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head> 
<body><pre>...</pre></body></html> 

Visualizzazione sulla console, System.out, non è possibile su un sistema non-UTF-8 come Windows.

Anche per la tua applicazione portatile, assicurati di specificare la codifica per la scrittura; spesso è un argomento facoltativo, con un metodo/costruttore sovrascritto.

+0

ho provato a specificare la codifica ma non ha funzionato: Charset.forName ("UTF-8"). Encode (string); \t \t \t errorOutput.writeln (stringa); – NullPointerException

+0

'new OutputStreamWriter (outputStream," UTF-8 ")' è una delle molte possibilità di avere una conversione per il testo, ('String, Writer') (che in java è sempre Unicode) in byte (' byte [], OutputStream '). Ma il file sembra già a posto, come UTF-8. L'editor deve solo sapere che è UTF-8. Usa JEdit o Notepad ++. –

+1

'Charset.forName (" UTF-8 "). Encode (string); errorOutput.writeln (stringa); '--- questo è chiaramente sbagliato. Ignori il valore di ritorno di 'encode', quindi invia semplicemente la stessa stringa che avevi in' errorOutput'. E btw 'errorOutput' dovrebbe essere un' OutputStream', non un 'Writer', perché funzioni. –