2017-10-29 2 views
2

Ich versuche, ein Dataset in RStudio zu importieren, aber ich bin mit chinesischen Schriftzeichen fest, wie sie chaotisch Codes werden. Hier ist der Code:readr :: read_csv Problem: Chinesischer Charakter wird unordentlich Codes

library(tidyverse) 
df <- read_csv("中文,英文\n英文,德文") 
df 
# A tibble: 1 x 2 
    `\xd6\xd0\xce\xc4`   `Ӣ\xce\xc4` 
       <chr>     <chr> 
1 "<U+04E2>\xce\xc4" "<U+00B5>\xc2\xce\xc4" 

Wenn ich die Basisfunktion read.csv verwenden, funktioniert es gut. Ich denke, ich muss mit der Codierung etwas falsch machen. Aber es gibt keine Kodierungsoption in read_csv, wie kann ich das tun?

+1

Sie überprüfen können [hier] (https://stackoverflow.com/questions/22876746/how-to-read-data-in-utf-8-format-in- r) oder [hier] (https://stackoverflow.com/questions/20577764/set -locale-zu-system-default-utf-8). In 'read_csv' gibt es ein 'locale'-Argument. Laut Dokumentation 'locale Das Gebietsschema steuert Standardeinstellungen, die von Ort zu Ort variieren. Das Standardgebietsschema ist US-zentriert (wie R), aber Sie können locale() verwenden, um ein eigenes Gebietsschema zu erstellen, das Dinge wie die Standardzeitzone, Kodierung, Dezimalzeichen, Großmarkierung und Tag-/Monatsnamen steuert. – akrun

+0

Beachten Sie auch, 'readr' kann alternative Kodierungen über' locale' lesen. Wie auch immer, * alle Readr-Funktionen ergeben Zeichenfolgen, die in UTF-8 codiert sind, gemäß [Paketdokumentation] (https://github.com/tidyverse/readr/blob/master/vignettes/locales.Rmd) –

+0

Vielen Dank für Ihre Kommentare! @ akrun @Kevin Arseneau Ich habe versucht, was du gesagt hast. Aber es funktioniert immer noch nicht. 'Sys.setlocale (Kategorie =" LC_ALL ", locale =" Englisch_United States.1252 ") read_csv (" a, b \ n 坏, 好 ") Sys.setlocale (Kategorie =" LC_ALL ", locale =" chinesisch ")) read_csv ("a, b \ n 坏, 好") ' –

Antwort

3

Dies ist, weil die Zeichen als UTF-8 markiert sind, während die tatsächliche Codierung der Systemstandard ist (Sie können durch stringi::stri_enc_get() erhalten).

So können Sie entweder tun:

1) Lesen von Daten mit der richtigen Codierung:

df <- read_csv("中文,英文\n英文,德文", locale = locale(encoding = stringi::stri_enc_get())) 

2) Daten lesen mit der falschen Codierung und sie mit der richtigen Codierung markieren später (beachten Sie, dass das funktioniert nicht immer):

df <- read_csv("中文,英文\n英文,德文") 
df <- dplyr::mutate_all(df, `Encoding<-`, value = "unknown") 
+0

Vielen Dank für Ihren Vorschlag! Es funktioniert ziemlich gut! –

Verwandte Themen