2015-10-11 7 views
5

Ich bin mir nicht sicher, ob das ein Fehler ist oder nicht. Wenn ich eines der Zeichen in UTF-8 codiere, bevor ich es in raw und zurück umwandle, sind die Zeichen nicht identisch. Ich habe Standardkodierung auf "UTF-8" in RStudio festgelegt.Kodierung und Raw in R

rawToChar(charToRaw(enc2utf8("vægt"))) 
[1] "vægt" 

rawToChar(charToRaw("vægt")) 
[1] "vægt" 

Hier ist meine Session()

R version 3.2.2 (2015-08-14) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows 7 x64 (build 7601) Service Pack 1 

locale: 
[1] LC_COLLATE=Danish_Denmark.1252 LC_CTYPE=Danish_Denmark.1252 LC_MONETARY=Danish_Denmark.1252 
[4] LC_NUMERIC=C     LC_TIME=Danish_Denmark.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] ggthemes_2.2.1 TTR_0.23-0  lubridate_1.3.3 tidyr_0.2.0  skm_1.0.2  ggplot2_1.0.1 dplyr_0.4.3  
[8] stringr_1.0.0 dkstat_0.08  

loaded via a namespace (and not attached): 
[1] Rcpp_0.12.1  rstudioapi_0.3.1 magrittr_1.5  MASS_7.3-43  munsell_0.4.2 lattice_0.20-33 
[7] colorspace_1.2-6 R6_2.1.1   httr_1.0.0  plyr_1.8.3  xts_0.9-7  tools_3.2.2  
[13] parallel_3.2.2 grid_3.2.2  gtable_0.1.2  DBI_0.3.1  lazyeval_0.1.10 assertthat_0.1 
[19] digest_0.6.8  reshape2_1.4.1 curl_0.9.3  memoise_0.2.1 labeling_0.3  stringi_0.5-5 
[25] scales_0.3.0  jsonlite_0.9.17 zoo_1.7-12  proto_0.3-10  
+2

Bestätigt auf meinem Windows 10-Rechner, funktioniert aber gut auf meinem Linux-Rechner. –

+1

Ich denke, das ist ein Windows-Problem. – KERO

+0

Dieses Problem tritt auf, wenn ich die verschiedenen xml-Pakete verwende. Kann jemand erklären, warum enc2utf8 vor dem charToRaw in den xml-Paketen benötigt wird? Sie können nicht im Namen der Autoren sprechen, aber ich möchte nur verstehen, warum es getan ist, und wenn ich vorschlagen kann, dass enc2utf8 entfernt wird, ohne dass es viele neue Probleme verursacht. – KERO

Antwort

5

Hier ist mein grundlegendes Verständnis von dem, was vor sich geht.

Zunächst einige Codierung Fakten:

    Encoding 
character UTF-8  CP1252 
    v   76    76 
    æ   c3 a6   e6 
    g   67    67 
    t   74    74 
    Ã   c3 83   c3 
    ¦   c2 a6   a6 

nun die Mechanik:

Der Windows-Rechner verwendet die CP1252 Codierung wie aus der sessionInfo Ausgabe zu sehen. So wird die vægt Zeichenfolge im R-Skript als die Bytes 76 e6 67 74 dargestellt. Dies wird bestätigt durch charToRaw("vægt"). Wenn wir es dann in UTF-8 konvertieren, erhalten wir 76 c3 a6 67 74. Die Tatsache, dass diese Bytes UTF-8 darstellen, ist verloren. Später rawToChar() konvertiert diese Bytes zurück in eine Zeichenfolge, wieder CP1252 vorausgesetzt. Seit c3 ist à und a6 ist ¦ in CP1252, erhalten wir vægt.

Auf Mac und Linux dagegen ist die Standardcodierung durchgängig UTF-8, und die Codierungskonflikte treten nicht auf. Ich vermute jedoch, dass das gleiche Phänomen wie unter Windows durch explizites Ändern/Setzen der von R. verwendeten Kodierung ausgelöst werden könnte. Ich glaube nicht, dass dies ein Fehler ist.

+0

Vielen Dank für die Erklärung! Nun verstehe ich diese Zeile in der Hilfe in 'rawToChar': _italic_ In beiden Fällen ist es möglich, ein Ergebnis zu erstellen, das in einem Multibyte-Gebietsschema ungültig ist, z. eine mit UTF-8. _italic_ Es gibt nicht viel, was ich dagegen tun kann, weil ich das Gebietsschema in Windows nicht nur für R ändern kann (es ist ein Computer, den ich von der Arbeit bekommen habe, also kann ich die Sprache nicht ändern)? – KERO