使用 readr 包将非英文文本读取为数据框(编码问题)

Read non-english text as data frame using readr package (encoding issue)

我有一条带数据的文本。文本为非英语文本,具有欧式数字和制表符分隔值:

Ežeras  Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0

我想使用 readr 包中的函数将其读入 R,但我在生成的数据集中遇到编码问题。

代码:

Sys.setlocale(locale = "Lithuanian")

library(readr)

read_tsv(locale = locale(decimal_mark = ","),
"Ežeras     Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0
")

结果:

# A tibble: 2 x 3
  `E\xfeeras`      `Plotas, ha` `Gylis, m`
  <chr>                   <dbl>      <dbl>
1 "Dr\xfbk\xf0iai"        4479        33.3
2 Dysnai                  2439.        6  

我也在函数locale()中尝试了encoding = "native"encoding = "unknown",但是这些选项无法识别。

我可以将数据写入文本文件并读取该文件以及使用 data.table::fread(),但这些不是我要搜索的选项。


devtools::session_info()

Session info --------------------------------------------------------------------
 setting  value                       
 version  R version 3.5.1 (2018-07-02)
 system   x86_64, mingw32             
 ui       RStudio (1.1.456)           
 language (EN)                        
 collate  Lithuanian_Lithuania.1257   
 tz       Europe/Helsinki             
 date     2018-10-15                  

Packages ------------------------------------------------------------------------
 package    * version    date       source                          
 assertthat   0.2.0      2017-04-11 CRAN (R 3.5.0)                  
 base       * 3.5.1      2018-07-02 local                           
 cli          1.0.1      2018-09-25 CRAN (R 3.5.1)                  
 compiler     3.5.1      2018-07-02 local                           
 crayon       1.3.4      2017-09-16 CRAN (R 3.5.0)                  
 datasets   * 3.5.1      2018-07-02 local                           
 devtools     1.13.6     2018-06-27 CRAN (R 3.5.1)                  
 digest       0.6.18     2018-10-10 CRAN (R 3.5.1)                  
 fansi        0.4.0      2018-10-05 CRAN (R 3.5.1)                  
 graphics   * 3.5.1      2018-07-02 local                           
 grDevices  * 3.5.1      2018-07-02 local                           
 hms          0.4.2.9001 2018-07-25 Github (tidyverse/hms@979286f)  
 memoise      1.1.0      2017-04-21 CRAN (R 3.5.0)                  
 methods    * 3.5.1      2018-07-02 local                           
 pillar       1.3.0      2018-07-14 CRAN (R 3.5.1)                  
 pkgconfig    2.0.2      2018-08-16 CRAN (R 3.5.1)                  
 R6           2.3.0      2018-10-04 CRAN (R 3.5.1)                  
 Rcpp         0.12.19    2018-10-01 CRAN (R 3.5.1)                  
 readr      * 1.1.1      2017-05-16 CRAN (R 3.5.1)                  
 rlang        0.2.2      2018-08-16 CRAN (R 3.5.1)                  
 rstudioapi   0.8        2018-10-02 CRAN (R 3.5.1)                  
 stats      * 3.5.1      2018-07-02 local                           
 tibble       1.4.2      2018-01-22 CRAN (R 3.5.0)                  
 tools        3.5.1      2018-07-02 local                           
 utf8         1.1.4      2018-05-24 CRAN (R 3.5.0)                  
 utils      * 3.5.1      2018-07-02 local                           
 withr        2.1.2      2018-09-05 Github (jimhester/withr@8b9cee2)
 yaml         2.2.0      2018-07-25 CRAN (R 3.5.1)   

尝试使用 data.table 库中的 fread。它适用于我的立陶宛语言环境。然后你可以转换为 as_tibble() 如果喜欢。 默认情况下,readr 函数将输出转换为 UTF-8。在 read_tsv 之后想到您可以使用 iconv() 函数。此解决方案也可以正常工作。

encoding = stringi::stri_enc_get() 应该可以。 c.f.:

read_tsv(locale = locale(decimal_mark = ",",
                         encoding = stringi::stri_enc_get()),
         "Ežeras     Plotas, ha  Gylis, m
Drūkšiai    4479,0  33,3
Dysnai  2439,4  6,0
")