2015-09-21 10 views
9

Ho un messaggio (o avviso o errore) contenente caratteri Unicode. (La stringa ha UTF-8 codifica.)Come visualizzare un messaggio/avviso/errore con caratteri Unicode in Windows?

x <- "\u20AC \ub124" # a euro symbol, and Hangul 'ne' 
## [1] "€ 네" 
Encoding(x) 
## [1] "UTF-8" 

Sotto Linux, questo stampa OK in un messaggio se il locale è UTF-8 (l10n_info()$`UTF-8` rendimenti TRUE).

posso forzare questo, facendo, per esempio,

devtools::with_locale(
    c(LC_CTYPE = "en_US.utf8"), 
    message(x) 
) 
## € 네 

In Windows non ci sono locali UTF-8, quindi non riesco a trovare un modo equivalente di far rispettare la stampa corretta. Ad esempio, con un'impostazione internazionale USA, il carattere Hangul non viene visualizzato correttamente.

devtools::with_locale(
    c(LC_CTYPE = "English_United States"), 
    message(x) 
) 
## € <U+B124> 

C'è un related problem con caratteri Unicode non visualizzano correttamente quando si stampano i frame di dati in ambiente Windows. Il consiglio era di impostare le impostazioni internazionali in cinese/giapponese/coreano. Questo non funziona qui.

devtools::with_locale(
    c(LC_CTYPE = "Korean_Korea"), 
    message(x) 
) 
## ¢æ ³× # equivalent to iconv(x, "UTF-8", "EUC-KR") 

Come è possibile visualizzare correttamente in Windows i messaggi, gli avvisi e gli errori UTF-8?

+0

Quale versione di Windows ti riferisci? Sospetto che non sia possibile risolvere questo problema su Windows 7, ma forse altre versioni hanno finalmente ottenuto il supporto Unicode adeguato. (Non trattengo il respiro comunque) – mpiktas

+0

@mpiktas L'ho testato su Windows 7, sebbene AFAIK, R non supporti le versioni locali di UTF-8 per le versioni più recenti di Windows, quindi sospetto che il problema si applichi a tutte le versioni. Felice di essere smentito. –

+1

Sospetto che ci sia qualcosa che sta succedendo con la stampa su stderr. 'message' stampa su stderr e poi abbiamo un problema: confronta' cat (x, file = stdout()) 'a' cat (x, file = stderr()) '. Ho provato a cercare nel codice sorgente di R e sono riuscito solo a scoprire che la stampa su stdout e stderr viene eseguita tramite funzioni diverse, ma non ho conoscenze in R internals per trovare dove sono le radici del problema. – mpiktas

risposta

0

ho notato che l'aiuto per la funzione Sys.setlocale() in R dice questo: "LC_MESSAGES" sarà "C" su sistemi che non supportano traduzione messaggio, e non è supportato su Windows.

Per me questo suona come modificare la rappresentazione dei caratteri per i messaggi di R/errori non può essere fatto su qualsiasi versione di Windows ...

Problemi correlati