Wie zu erkennen, das richtige encoding für das Lesen.csv?
Habe ich diese Datei (http://b7hq6v.alterupload.com/en/), die ich Lesen möchte in R mit read.csv
. Aber ich bin nicht in der Lage, den korrekten Zeichensatz erkennen. Es scheint eine Art von UTF-8. Ich bin mit R 2.12.1 auf einer WindowsXP-Maschine.
Keine Hilfe?
Der link ist tot.
InformationsquelleAutor Alex | 2011-01-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Zunächst basierend auf einer mehr Allgemeinen Frage auf StackOverflow es ist nicht möglich, zu erkennen, Kodierung der Datei in 100% iger Sicherheit.
Habe ich kämpfen, diese viele Male und kommen, um nicht die automatische Lösung:
Verwenden
iconvlist
um alle möglichen Codierungen:Dann die Daten Lesen, mit jeder von Ihnen
Wichtig ist hier zu wissen, die Struktur der Datei (Trennzeichen, Header). Legen Sie die Enkodierung mit Hilfe von
fileEncoding
argument. Lesen Sie nur einige wenige Zeilen.Nun konnte man sich lookup auf die Ergebnisse:
Scheint, richtig ist, dass mit 3 Zeilen und 29 Spalten, so können Sie sehen:
Kann man sich auf Daten zu
Für Ihre Datei alle diese Kodierungen gibt identische Daten (teilweise, denn es gibt einige Redundanz, wie Sie sehen).
Wenn Sie nicht wissen, spezifische Ihrer Datei, die Sie verwenden müssen
readLines
mit einigen änderungen in Workflows (z.B. können Sie nicht verwendenfileEncoding
verwenden, musslength
stattdim
, mehr Magie zu finden, die richtigen sind).Ich skizzierte ein ähnlicher Ansatz, der auf die gist.github.com/837414 - ich glaube, es ist effizienter, um die Daten zu laden einmal, und dann versuchen, verschiedene Codierungen mit
iconv
.Netter trick. Zumindest weiß ich meine
read.csv
Problem nicht zu tun haben mitfileEncoding
.InformationsquelleAutor Marek
Paket
readr
, https://cran.r-project.org/web/packages/readr/readr.pdf, enthält eine Funktion namensguess_encoding
berechnet die Wahrscheinlichkeit, mit der eine Datei kodiert wird, die in mehreren Codierungen:InformationsquelleAutor Enrique Pérez Herrero
Erste, Sie haben, um herauszufinden, was ist die Codierung der Datei, was nicht getan werden kann in f (zumindest die ich kenne). Sie können externe tools für die es z.B. von Perl -, python-oder zB. die
file
- utility unter Linux/UNIX.Als @ssmit schlug vor, Sie haben eine UTF-16LE (Unicode) encoding hier, so laden Sie die Datei mit der Codierung und Verwendung
readLines
zu sehen, was Sie in den ersten (z.B.) 10 Zeilen:Daraus kann gesehen werden, dass wir einen header und eine leere Zeile in der zweiten Zeile (die übersprungen werden standardmäßig mithilfe der
read.table
- Funktion), das Trennzeichen ist\t
- und das dezimal-Trennzeichen ist,
.Sehen, was wir haben:
Sie haben Recht, die
skip=2
weggelassen werden kann (ich bearbeitet habe, meine Antwort basierte auf dass), die zweite, leere Zeile wird übersprungen. Sie können auch dieread.csv
Funktion zum Lesen dieser Datei (mit dem gleichen paramateres gegeben), aber als Sie Ihre Datei nicht durch ein Komma getrennt werden, aber Tabulatoren statt, ich glaube nicht, es wäre schön. Suchen?read.table
für details über die ähnlichkeiten der Funktionen (die Unterschiede können gefunden werden in der Standardeinstellung).InformationsquelleAutor daroczig
Neben der Verwendung der readr-Paket, können Sie auch wählen, verwenden Sie stringi::stri_enc_detect2. Diese Funktion ist besonders dann effizient, wenn die Ländereinstellung ist bekannt und wenn es um irgendeine form von UTF und ASCII: "..es stellt sich heraus, dass (empirisch) stri_enc_detect2 funktioniert besser als der IPS-basierten [stringi::stri_enc_detect verwendet, durch die guess_encoding], wenn die UTF-* der text wird zur Verfügung gestellt."
Details zu stringi::stri_enc_detect.
Details zu stringi::stri_enc_detect2.
Change-request für guess_encoding
InformationsquelleAutor ElToro1966
Diese Datei ist UTF-16LE-Codierung mit BOM (byte order mark). Sie sollten wahrscheinlich nicht verwenden
encoding = "UTF-16LE"
Für die Vollständigkeit dieser Antwort:
read.table
richtige parameter istfileEncoding
.InformationsquelleAutor ssmir