utf8 studio spanish from fileencoding encodings accents r csv encoding utf-8 non-ascii-characters

studio - re-encoding from utf-8 in r



R en Windows: codificación de caracteres del infierno (5)

Creo que hay todas las grandes respuestas aquí y muchos duplicados. Intento contribuir con, con suerte, una descripción más completa del problema y la forma en que estaba utilizando las soluciones anteriores.

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

Para mi propósito particular, estaba enviando 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 así:

Sin embargo, si imprimo mi variable en la Consola, veré este texto bien formateado (espero):

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

En mi situación tuve que escribir un archivo en el Sistema de archivos de computadora usando la función R write.table() ... pero cualquier cosa que escribiera estaría en el formato:

Mi solución - tomada de las respuestas anteriores:

Decidí usar la función Sys.setlocale() esta manera:

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 eso, mi traducción se visualizó 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 R Medio Ambiente fue:

Después de eso pude escribir mi archivo y finalmente ver el texto chino:

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

Finalmente, en mi función de traducción, volvería 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. Configurar la configuración regional a la de un idioma específico 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

Estoy intentando importar un CSV codificado como OEM-866 (juego de caracteres cirílico) en R en Windows. También tengo una copia que se ha convertido a UTF-8 sin BOM. Ambos archivos son legibles por todas las demás aplicaciones en mi sistema, una vez que se especifica la codificación.

Además, en Linux, R puede leer estos archivos en particular con las codificaciones especificadas. También puedo leer el CSV en Windows SI no especifico el parámetro "fileEncoding", pero esto da como resultado un texto ilegible. Cuando especifico la codificación del archivo en Windows, siempre obtengo los siguientes errores, tanto para el OEM como para el archivo Unicode:

Importación original de archivos OEM:

> 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 sin importación de archivo BOM:

> 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

Información local:

> 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"

¿De qué se trata R en Windows que es responsable de esto? He intentado todo lo que pude en este punto, además de deshacerme de las ventanas.

Gracias

(Intentos fallidos adicionales):

>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


Es posible que su problema se resuelva cambiando la codificación de archivos a codificación, estos parámetros funcionan de manera diferente en la función de lectura (consulte? Leer).

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

Sin embargo, por si acaso, una respuesta más completa, ya que puede haber algunos obstáculos no obvios. En resumen: es posible trabajar con Cyrillic en R en Windows (en mi caso, Win 7).

Es posible que deba probar algunas codificaciones posibles para que las cosas funcionen. Para la minería de texto, un aspecto importante es obtener las variables de entrada para que coincidan con los datos. Allí la función de codificación () es muy útil, ver también iconv (). Por lo tanto, es posible ver su parámetro nativo.

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

En mi caso, la codificación es UTF-8, aunque esto puede depender de la configuración del sistema. Entonces, podemos probar el resultado con UTF-8 y UTF-8-BOM, y hacer un archivo de prueba en notepad ++ 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 en 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 Cyrillic en la vista (raw_table1) y gibberish en la consola.

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

Sin embargo, lo más importante es que el script no le da acceso.

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

Los resultados para No BOM UTF-8, son algo así para la vista (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, lo más importante es que una búsqueda de la palabra en el interior producirá el resultado correcto.

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

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

PS Las palabras rusas se generaron aquí http://generator.lorem-ipsum.info/_russian , tan esencialmente sin sentido. PPS Las advertencias que mencionó permanecen sin efectos aparentes importantes.


Hay dos opciones para leer datos de archivos que contienen caracteres no compatibles con su configuración regional actual. Puede cambiar su configuración regional como lo sugiere @ user23676 o puede convertir a UTF-8. El paquete de readr proporciona reemplazos para las read.table derivadas de la read.table de read.table que realizan esta conversión por usted. Puedes leer el archivo CP866 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 print.data.frame que print.data.frame que las columnas con codificación UTF-8 se muestren incorrectamente en Windows. Puede print.listof(oem.csv) el error con print.listof(oem.csv) o print(as.matrix(oem.csv)) .

He discutido esto con más detalle en una publicación de blog en http://people.fas.harvard.edu/~izahn/posts/reading-data-with-non-native-encoding-in-r/


Respuesta simple

Sys.setlocale(locale = "Russian")

Si solo quieres el idioma ruso (no formatos, moneda):

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

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

Si está usando Revolution R Open 3.2.2, es posible que también deba establecer la configuración regional en el Panel de control: de lo contrario, si tiene RStudio, verá texto en cirílico en el Visor y basura en la consola. Entonces, por ejemplo, si escribe una cadena cirílica aleatoria y pulsa enter, obtendrá una salida de basura. Curiosamente, la Revolución R no tiene el mismo problema con decir texto en árabe. Si usa R regular, parece que Sys.setlocale() es suficiente.

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


Según Wikipedia :

La marca de orden de bytes (BOM) es un carácter Unicode que se utiliza para indicar la endianidad (orden de bytes). [...] El estándar de Unicode permite la lista de materiales en UTF-8, pero no requiere ni recomienda su uso.

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

Muchas aplicaciones nacidas en un mundo Linux (incluida LaTex, por ejemplo, al usar el paquete inputenc con el utf8 ) muestran problemas al leer archivos BOM-UTF-8.

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

Como sabemos, la representación no recomendada de UTF-8 de la lista de materiales es la secuencia de bytes

0xEF,0xBB,0xBF

al comienzo de la secuencia de texto, ¿por qué no eliminarlo con la propia R?

## 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)