2015-10-11 8 views
5

これはバグかどうかわかりません。文字のうちの1つをUTF-8にエンコードしてからrawに変換し直す場合、文字は同じではありません。私はRStudioでデフォルトのエンコーディングを "UTF-8"に設定しました。ここでエンコーディングとR未加工

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

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

は私のSessionInfo(ある)

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

私のWindows 10マシンで確認されていますが、Linuxマシンで正常に動作します。 –

+1

これはWindowsの問題だと思います。 – KERO

+0

これは、異なるxmlパッケージを使用するときに実行する問題です。誰もxmlパッケージのcharToRawの前にenc2utf8が必要な理由を説明できますか?著者に代わって話すことはできませんが、なぜそれが完了したのか、そしてenc2utf8がそれを削除して新たな問題を多く引き起こすことを示唆しているのか理解したいだけです。 – KERO

答えて

5

ここで何が起こっているの私の基本的な理解です。

まず、いくつかのエンコーディングの事実:

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

は今力学:

WindowsマシンがsessionInfo出力からわかるようにCP1252エンコーディングを使用しています。したがって、Rスクリプト内のvægt文字列は、バイト76 e6 67 74として表されます。これはcharToRaw("vægt")によって確認されます。 UTF-8に変換すると76 c3 a6 67 74となります。これらのバイトがUTF-8を表すという事実は失われます。後でrawToChar()は、これらのバイトを文字列に変換し、CP1252とします。 CP1252ではc3Ãであり、a6¦であるため、vægtとなります。

一方、デフォルトのエンコードはUTF-8で、エンコードの不一致は発生しません。しかし、Windowsでの現象と同じような現象は、Rで使用されているエンコーディングを明示的に変更/設定することによって引き起こされる可能性があります。

これはバグではありません。

+0

説明をありがとう!今、私は 'rawToChar'のヘルプのこの行を理解していると思います:_italic_どちらの場合でも、マルチバイトロケールでは無効な結果を作成することができます。 1つはUTF-8を使用します。 _italic_ Rのためだけにロケールを変更することができないので、私はそれについて何もできません(私は仕事から得たコンピュータなので、言語を変更できません)? – KERO

関連する問題