Estoy tratando de importar un CSV codificado como OEM-866 (juego de caracteres Cirílico) en R en Windows. Yo también tengo una copia que se ha convertido en UTF-8 sin BOM. Ambos de estos archivos son legibles por todas las otras aplicaciones en mi sistema, una vez que la codificación especificada.

Además, en Linux, R puede leer estos archivos en particular en la que se especifica codificaciones bien. También puede leer el CSV en Windows SI no me especificar el «fileEncoding» parámetro, pero esto resulta en un texto ilegible. Cuando me especificar la codificación de archivo en Windows, siempre me da los siguientes errores, para el OEM y el archivo Unicode:

Original, OEM de importación de archivo:

> oem.csv <- read.table("~/csv1.csv", sep=";", dec=",", quote="",fileEncoding="cp866")   #result:  failure to import all rows
Warning messages:
1: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  invalid input found on input connection '~/Revolution/RProject1/csv1.csv'
2: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  number of items read is not a multiple of the number of columns

UTF-8 w/o lista de materiales de importación de archivo:

> unicode.csv <- read.table("~/csv1a.csv", sep=";", dec=",", quote="",fileEncoding="UTF-8") #result:    failure to import all row
Warning messages:
1: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  invalid input found on input connection '~/Revolution/RProject1/csv1a.csv'
2: In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  :
  number of items read is not a multiple of the number of columns

Regional info:

> Sys.getlocale()
   [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"

Lo que se trata de R en Windows que es el responsable de esto? Tengo casi intentado todo lo que podía por este punto, además de amaraje forzoso de windows.

Gracias

(Adicionales a los intentos fallidos):

>Sys.setlocale("LC_ALL", "en_US.UTF-8") #OS reports request to set locale to "en_US.UTF-8" cannot be honored
>options(encoding="UTF-8") #now nothing can be imported  
> noarg.unicode.csv <- read.table("~/Revolution/RProject1/csv1a.csv", sep=";", dec=",", quote="")   #result: mangled cyrillic
> encarg.unicode.csv <- read.table("~/Revolution/RProject1/csv1a.csv", sep=";", dec=",", quote="",encoding="UTF-8") #result: mangled cyrillic
  • Esas son las advertencias, no errores.
  • A menudo esas advertencias indican incrustadas comas en lugar de cualquier nefasto problemas de codificación.
  • ACTUALIZACIÓN: Acaba de crear una muy simple simple UTF-8 csv en el Bloc de notas++. La primera fila es el inglés, la segunda fila es el Cirílico. R arroja exactamente el mismo aviso y SÓLO lee el inglés fila. Así que está claro que leer.tabla siempre se producirá un error con el texto extranjero cuando el fileEncoding parámetro se especifica.
  • Me gustaría saber si alguien aquí el uso de R en la que NOS copia de Windows en realidad se puede leer un archivo UTF-8 con los no-ACSI caracteres.
  • Mismo problema exacto: stackoverflow.com/questions/16838613/… Podemos concluir que R en windows comprende sólo lee caracteres en inglés? Si esto es un error, ciertamente descomunal…
  • ¿Puede dar un ejemplo de tus datos? He intentado importar UTF-8 archivo CSV con un inglés fila y dos Cirílico y se lee bien (sin especificar la codificación). Puedo View los datos en RStudio de datos del visor de tramas, pero si el uso head en la ventana de la consola, a continuación, puedo obtener de la basura. Lo que me lleva a creer que el problema es con la forma de la consola muestra los caracteres no-latinos y no con la importación.
  • podría ser que el carácter de nueva línea tiene otro formato que el utilizado en Windows (0x0D 0x0A)?
  • Estoy de acuerdo con @aseidlitz — es probablemente más una cuestión de visualización. Importación de los datos, luego exportarlo a csv y comprobar con un programa externo. En mi caso cirílico se muestra correctamente en el RStudio de la consola O en el Visor de la ficha, nunca ambos. En la Revolución del IDE, tengo basura en la consola, pero el resultado correcto en el examinador de objetos.
  • Yo estaba usando Rstudio en Windows y tenía el problema de la basura en la consola y el visor de datos. Es posible que esto ha sido resuelto con la actualización más reciente de R. por Favor, tenga en cuenta que este problema sólo se aplica a Windows. He probado con varios idiomas, siempre con el mismo resultado. Este tema ha sido confirmado en el principal R lista de correo y existe el problema de diseño: R basa en el sistema operativo de la configuración regional.
  • Posibles duplicados de R, Windows y caracteres de idiomas extranjeros

InformationsquelleAutor user27636 | 2013-09-13

5 Comentarios

  1. 5

    Es posible que tu problema sea resuelto por un cambio de fileEncoding en la codificación, estos parámetros funcionan de manera diferente en la función de lectura (ver ?lea).

    oem.csv <- read.table("~/csv1.csv", sep=";", dec=",", quote="",encoding="cp866")

    Sólo en el caso, sin embargo, una respuesta más completa, como puede ser algunos de los obstáculos obvios. En resumen: es posible trabajar con Cirílico en R en Windows (en mi caso windows 7).

    Puede que tenga que probar un par de posibles codificaciones para conseguir que las cosas funcionen. Para la minería de texto, un aspecto importante es conseguir que el de sus variables de entrada para que coincida con los datos. Allí la función de Codificación() es muy útil, véase también iconv(). Así es posible ver su primer parámetro.

    Encoding(variant <- "Минемум")

    En mi caso, la codificación es UTF-8, aunque esto puede depender de la configuración del sistema. Así, podemos probar el resultado con UTF-8 y UTF-8-lista de materiales, y hacer una prueba de archivo en el bloc de notas++ con una línea de latín y una línea de Cirílico.

    UTF8_nobom_cyrillic.csv & UTF8_bom_cyrillic.csv

    part2, part3, part4
    Минемум конкыптам, тхэопхражтуз, ед про

    Esto puede ser importado a R por

    raw_table1 <- read.csv("UTF8_nobom_cyrillic.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8")
    raw_table2 <- read.csv("UTF8_bom_cyrillic.csv", header = FALSE, sep = ",", quote = "\"", dec = ".", fill = TRUE, comment.char = "", encoding = "UTF-8-BOM")

    Los resultados de estos son, para mí, para BOM regular Cirílico en la vista(raw_table1), y galimatías en la consola.

    part2, part3, part4
    ŠŠøŠ½ŠµŠ¼ŃŠ¼ ŠŗŠ¾Š½ŠŗŃ‹ŠæŃ‚Š°Š¼ тхѨŠ¾ŠæŃ…Ń€Š°Š¶Ń‚ŃŠ

    Lo que es más importante, sin embargo, el guión no da acceso a la misma.

    > grep("Минемум", as.character(raw_table2[2,1]))
    integer(0)

    Los resultados Sin BOM UTF-8, son algo como esto para ver(raw_table1) y la consola.

    part2, part3, part4
    <U+041C><U+0438><U+043D><U+0435><U+043C><U+0443><U+043C> <U+043A><U+043E><U+043D><U+043A><U+044B><U+043F><U+0442><U+0430><U+043C> <U+0442><U+0445><U+044D><U+043E><U+043F><U+0445><U+0440><U+0430><U+0436><U+0442><U+0443><U+0437> <U+0435><U+0434> <U+043F><U+0440><U+043E>

    Sin embargo, es importante destacar que, una búsqueda de la palabra dentro dará el resultado correcto.

    > grep("Минемум", as.character(raw_table1[2,1]))
    1

    Por lo tanto, es posible trabajar con caracteres no estándar en Windows, dependiendo de sus objetivos precisos, aunque.
    Yo trabajo con no-inglés caracteres latinos con regularidad y el UTF-8 permite trabajar en Windows 7 sin problemas. «WINDOWS-1252» ha sido útil para exportar a Microsoft lectores como Excel.

    PS El ruso palabras fueron generados aquí http://generator.lorem-ipsum.info/_russian, por lo tanto, esencialmente sin sentido.
    PPS de Las advertencias que usted ha mencionado siguen todavía sin aparentes efectos importantes.

    • encoding="cp866" no funciona, los únicos valores válidos para este argumento se UTF-8 o latin1. Ver ?reas.table y ?file.
  2. 5

    Respuesta Simple.

    Sys.setlocale(locale = "Russian")

    si sólo quieres el idioma ruso (no formatos de moneda):

    'Sys.setlocale(category = "LC_COLLATE", locale = "Russian")'

    'Sys.setlocale(category = "LC_CTYPE", locale = "Russian")'

    Si se está utilizando Revolución R Abierto 3.2.2, puede que sea necesario establecer la configuración regional en el Panel de Control así: de lo contrario – si usted tiene RStudio – verás Cirílico texto en el Visor y la basura en la consola. Así, por ejemplo, si escribe un azar cirílico cadena y pulse enter obtendrá de basura de salida. Curiosamente, la Revolución R no tiene el mismo problema con decir que el texto en árabe. Si el uso regular R, parece que Sys.setlocale() es suficiente.

    ‘Sys.setlocale () » fue sugerida por el usuario G. Grothendieck aquí: R, Windows y caracteres de idiomas extranjeros

    • Mientras que este vínculo puede responder a la pregunta, es mejor incluir a las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Enlace-sólo respuestas puede ser válido si la página enlazada cambios. – De Revisión
    • Esta es la respuesta por CIERTO, a pesar de los downvotes.
    • También me ayudó. Buena idea, todavía triste que no parece ser una solución conveniente. 😉
  3. 5

    Hay dos opciones para la lectura de los datos de los archivos que contienen caracteres no admitidos por su localización actual. Usted puede cambiar su configuración regional como sugerido por @user23676 o se puede convertir a UTF-8. El readr paquete proporciona los reemplazos para read.table derivados de las funciones que realiza esta conversión para usted. Usted puede leer el CP866 archivo con

    library(readr)
    oem.csv <- read_csv2('~/csv1.csv', locale = locale(encoding = 'CP866'))

    Hay un pequeño problema, que es que hay un error en la print.data.frame que los resultados en las columnas con la codificación UTF-8 para que se muestren correctamente en Windows. Usted puede evitar el error con print.listof(oem.csv) o print(as.matrix(oem.csv)).

    He discutido esto en más detalle en una entrada de blog en http://people.fas.harvard.edu/~izahn/posts/lectura de datos-con-no-nativos-codificación-en-r/

    • Esto es tan genial! Y el comentario en la impresión error! Habría tomado las edades a encontrar. Gracias por el post! Habiendo terminado en la codificación de caracteres del infierno, una vez más, su respuesta definitiva resuelve la pregunta! Que y me recuerda a usar Linux.
  4. 2

    Creo que no son todos los grandes respuestas aquí y un montón de duplicados. Intento contribuir con ojalá, más completa la descripción del problema y la manera en que yo estaba usando las soluciones anteriores.

    Mi situación – escribir los resultados de la API de Google Translate para el archivo en R

    Para mi propósito en particular estaba enviando el texto a la API de Google:

       # load library
       library(translateR)
    
       # return chinese tranlation
       result_chinese <- translate(content.vec = "This is my Text",
                                google.api.key = api_key, 
                                source.lang = "en",
                                target.lang = "zh-CN")

    El resultado que veo en el R Environment es como este:

    R en Windows: la codificación de caracteres infierno

    Sin embargo si puedo imprimir mi variable en la Consola voy a ver esta bien formateada (espero) texto:

    > print(result_chinese)
    [1] "这是我的文字"

    En mi situación que me tenía que escribir el archivo en el Equipo del Sistema de Archivos usando la función de R write.table()… pero cualquier cosa que me gustaría escribir sería en el formato:

    R en Windows: la codificación de caracteres infierno

    Mi Solución tomada desde arriba respuestas:

    Decidí usar la función Sys.setlocale() como este:

    Sys.setlocale(locale = "Chinese") # set locale to Chinese
    
    > Sys.setlocale(locale = "Chinese") # set locale to Chinese
    [1] "LC_COLLATE=Chinese (Simplified)_People's Republic of China.936;LC_CTYPE=Chinese (Simplified)_People's Republic of China.936;LC_MONETARY=Chinese (Simplified)_People's Republic of China.936;LC_NUMERIC=C;LC_TIME=Chinese (Simplified)_People's Republic of China.936"

    Después de que mi traducción fue visualizado correctamente en el Entorno R:

    # return chinese tranlation with new locale 
    result_chinese <- translate(content.vec = "This is my Text",
                                google.api.key = api_key, 
                                source.lang = "en",
                                target.lang = "zh-CN")

    El resultado en Entorno R fue:

    R en Windows: la codificación de caracteres infierno

    Después de que yo pudiera escribir mi archivo y, finalmente, ver texto en chino:

    # writing 
    write.table(result_chinese, "translation.txt")

    R en Windows: la codificación de caracteres infierno

    Finalmente, en mi traducción de la función me gustaría volver a mi configuración original con:

    Sys.setlocale() # to set up current locale to be default of the system
    
    > Sys.setlocale() # to set up current locale to be default of the system
    [1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252"

    Mi conclusión:

    Antes de tratar con idiomas específicos en R:

    1. Configuración regional a la una de la lengua específica Sys.setlocale(locale = "Chinese") # set locale to Chinese
    2. Realizar todas las manipulaciones de datos
    3. Volver a la configuración original Sys.setlocale() # set original system settings
  5. 0

    Según Wikipedia:

    La marca de orden de bytes (BOM) es un carácter Unicode utiliza para indicar el peso (del orden de bytes) […]
    El Estándar Unicode permite que la lista de materiales en UTF-8, pero no requiere, ni recomendar su uso.

    De todos modos en el mundo de Windows UTF8 se utiliza con la lista de materiales. Por ejemplo, el estándar editor de Bloc de notas utiliza la lista de materiales al guardar como UTF-8.

    Muchas aplicaciones nacido en un mundo de Linux (incluido el Látex, por ejemplo, cuando se utiliza el inputenc paquete con el utf8) presentan problemas en la lectura de BOM-archivos UTF-8.

    Notepad++ es una opción típica para convertir los tipos de codificación, Linux/DOS/Mac finales de línea y extracción de materiales.

    Como sabemos que el UTF-8 no se recomienda la representación de la lista de materiales es la secuencia de bytes

    0xEF,0xBB,0xBF

    al inicio de la secuencia de texto, ¿por qué no la eliminación de los R de la misma?

    ## Converts an UTF8 BOM file as a NO BOM file
    ## ------------------------------------------
    
    ## Usage:
    ## Set the variable BOMFILE (file to convert) and execute
    
    BOMFILE="C:/path/to/BOM-file.csv"
    
    
    conr= file(BOMFILE,  "rb")
    if(readChar(conr, 3, useBytes = TRUE)== ""){
        cat("The file appears UTF8-BOM. Converting as NO BOM.\n\n") 
        BOMFILE=sub("(\.\w*$)", "-NOBOM\1", BOMFILE)
        BOMFILE=paste0( getwd(), '/', basename (BOMFILE))
    
        if(file.exists(BOMFILE)){
            cat(paste0('File:\n', BOMFILE, '\nalready exists. Please rename.\n' ))  
        } else{
    
        conw= file(BOMFILE,  "wb")
            while(length( x<-readBin(conr, "raw", n=100)) !=0){
                cat (rawToChar (x))
                writeBin(x, conw)  
        }
        cat(paste0('\n\nFile was converted as:\n', getwd(), BOMFILE, '\n' ))    
        close(conw) 
        }
    }else{
        BOMFILE=paste0( getwd(), '/', basename (BOMFILE))
        cat(paste0('File:\n', BOMFILE, '\ndoes not appear UTF8 BOM.\n' ))   
    
    }
    close(conr)
    • Esta es la respuesta a una pregunta diferente! Primera lista de materiales no es la cuestión aquí. Segundo, el problema no es UTF-específicos. Todos los personajes son ilegibles a R en windows, y el programa siempre tropiezo de la fileEncoding parámetro cuando los personajes están presentes.

Dejar respuesta

Please enter your comment!
Please enter your name here