2012-06-27 11 views
11

Ho una stringa simile alla seguente:dati scrittura non è preservare la codifica

str <- "ていただけるなら" 
Encoding(str) #returns "UTF-8" 

scrivo su disco:

write.table(str, file="chartest", quote=F, col.names=F, row.names=F) 

Ora guardo il file in Notepadd ++, che è impostato a UTF-8 senza codifica BOM e ottengo questo:

<U+3066><U+3044><U+305F><U+3060><U+3051><U+308B><U+306A><U+3089> 

Cosa non funziona in questo processo? Vorrei che il file di testo scritto per visualizzare la stringa di come appare in R.

Questo è il Windows 7, la versione R 2.15

risposta

1

Hai provato a usare l'argomento fileEncoding?

write.table(str, file="chartest", quote=F, col.names=F, row.names=F, fileEncoding="UTF-8") 
+1

Grazie per il suggerimento. Cercando che non sembra funzionare però. – qua

+0

OK così al momento ho provato sul mio computer di lavoro (su Mac OSX) e ha funzionato, ma da allora ho provato sul mio computer di casa (Windows 7) e non ha davvero. – plannapus

13

Questa è una "caratteristica" fastidiosa di R in Windows. L'unica soluzione che ho trovato finora è di modificare temporaneamente e in modo programmato le impostazioni internazionali in quella appropriata richiesta per decodificare lo script del testo in questione. Quindi, nel caso precedente dovresti usare le impostazioni locali giapponesi.

## This won't work on Windows 
str <- "ていただけるなら" 
Encoding(str) #returns "UTF-8" 
write.table(str, file="c:/chartest.txt", quote=F, col.names=F, row.names=F) 
## The following should work on Windows - first grab and save your existing locale 
print(Sys.getlocale(category = "LC_CTYPE")) 
original_ctype <- Sys.getlocale(category = "LC_CTYPE") 
## Switch to the appropriate local for the script 
Sys.setlocale("LC_CTYPE","japanese") 
## Now you can write your text out and have it look as you would expect 
write.table(str, "c:/chartest2.txt", quote = FALSE, col.names = FALSE, 
      row.names = FALSE, sep = "\t", fileEncoding = "UTF-8") 
## ...and don't forget to switch back 
Sys.setlocale("LC_CTYPE", original_ctype) 

Quanto sopra produce i due file che è possibile vedere in questo screenshot. Il primo file mostra i punti codice Unicode, che non è quello che vuoi, mentre il secondo mostra i glifi che normalmente ti aspetteresti.

Japanese text

Finora nessuno è stato in grado di spiegare a me perché questo accade in R. Non è una caratteristica inevitabile di Windows perché Perl, come ho detto in this postale, ottiene intorno al problema in qualche modo.

+0

Grazie per la risposta. Il giapponese era solo un esempio, mi piacerebbe qualcosa che funzioni per tutti i tipi di lingua. Però non sembra così promettente. – qua

+0

@qua - Sì, ho pensato che potrebbe essere un esempio casuale dato che hai rotto la stringa giapponese in un posto piuttosto strano. Sfortunatamente a questo punto non penso che esista una soluzione migliore per R, ma per favore crea la tua risposta a questa domanda se la trovi! Sono d'accordo sul fatto che se non conosci la sceneggiatura in anticipo potresti avere difficoltà con il mio approccio perché (tra gli altri problemi) ti richiederebbe di indovinare lo script usato e non c'è semplicemente un modo sicuro per stabilire il tipo di codifica. – SlowLearner

+0

@SlowLearner C'è un modo per elencare tutti i valori validi per LC_CTYPE? – panterasBox

Problemi correlati