【问题标题】:read_excel returns Unicode characters instead of a tableread_excel 返回 Unicode 字符而不是表格
【发布时间】:2023-05-21 13:49:01
【问题描述】:

我想使用readxl 包从 Excel 工作表中获取表格。我有以下代码:

dir = tempfile()
download.file("http://www.kase.kz/files/market_valuation/ru/2017/val170502170509.zip", dir)
unzip(dir, list = TRUE)
file = unzip(dir, list = TRUE)[2, 1]
xl = read_excel(file, sheet = 1)
xl

我得到的结果是:

# A tibble: 7 × 11
                                                                                                                                                                                                                                                                                                                                                      `42857`
                                                                                                                                                                                                                                                                                                                                                        <chr>
1 <U+041E><U+0431><U+043B><U+0438><U+0433><U+0430><U+0446><U+0438><U+0438> <U+043C><U+0435><U+0436><U+0434><U+0443><U+043D><U+0430><U+0440><U+043E><U+0434><U+043D><U+044B><U+0445> <U+0444><U+0438><U+043D><U+0430><U+043D><U+0441><U+043E><U+0432><U+044B><U+0445> <U+043E><U+0440><U+0433><U+0430><U+043D><U+0438><U+0437><U+0430><U+0446><U+0438><U+0439>
2                                                                                                                                                                                                                                                                                                                                  <U+2116> <U+043F>/<U+043F>
3                                                                                                                                                                                                                                                                                                                                                        <NA>
4                                                                                                                                                                                                                                                                                                                                                           1
5                                                                                                                                                                                                                                                                                                                                                           2
6                                                                                                                                                                                                                                                                                                                                                           3
7                                                                                                                                                                                                                                                                                                                                                           4
# ... with 10 more variables: X__1 <chr>, X__2 <chr>, X__3 <chr>, X__4 <chr>, X__5 <chr>, X__6 <chr>, X__7 <chr>, X__8 <chr>, X__9 <chr>, X__10 <chr>

有人可以提出解决方案吗?

经过一些修正:

# A tibble: 7 x 11
                                         `42857`         X__1         X__2         X__3                          X__4              X__5
                                           <chr>        <chr>        <chr>        <chr>                         <chr>             <chr>
1 Облигации международных финансовых организаций         <NA>         <NA>         <NA>                          <NA>              <NA>
2                                          № п/п          НИН         ISIN Торговый код Краткое наименование эмитента Дней до погашения
3                                           <NA>         <NA>         <NA>         <NA>                          <NA>              <NA>
4                                              1 KZP01Y05E384 KZ2D00002623  EABRK281217     Евразийский банк развития               236
5                                              2 KZP02Y05E382 KZ2D00002631  EABRK250418     Евразийский банк развития               353
6                                              3 KZP03Y05E380 KZ2D00002763  EABRK180819     Евразийский банк развития               826
7                                              4 KZP04Y05E388 KZ2D00002771  EABRK180919     Евразийский банк развития               856
# ... with 5 more variables: X__6 <chr>, X__7 <chr>, X__8 <chr>, X__9 <chr>, X__10 <chr>

【问题讨论】:

  • 您确定这是 Excel 文件而不是 CSV 文件吗?至于 Unicode,如果您的 R 控制台或 R Studio 未设置为显示 Unicode 文本,则任何 UTF8 编码文件的外观都是这样
  • 我很积极。手动查看:)

标签: r unicode unzip import-from-excel


【解决方案1】:

我认为您需要更改您的语言环境设置,您可以使用Sys.setlocale("LC_CTYPE", "russian") 执行此操作,一旦我将设置更改为俄语,我就可以看到 UTF-8 到俄语字母,但我不确定您所在的地区。

要返回之前使用的设置 Sys.setlocale("LC_CTYPE", "english") ,在这些设置下,我得到了俄文(西里尔文)字母的 U+XXX 值。

我的以下列名使用俄语语言环境:

> names(xl)
 [1] "№ п/п"                                      
 [2] "НИН"                                        
 [3] "ISIN"                                       
 [4] "Торговый код"                               
 [5] "Краткое наименование эмитента"              
 [6] "Дней до погашения"                          
 [7] "без дисконта, \"чистая\""                   
 [8] "без дисконта, \"грязная\""                  
 [9] "с  дисконтом, \"грязная\" (для целей биржи)"
[10] "Цена прошлого периода, % (без дисконта)"    
[11] "Ставка купона, %"     

表:

请在使用此解决方案之前备份您的区域设置。

你可以这样做:

oldloc <- Sys.getlocale("LC_CTYPE")

Sys.setlocale("LC_CTYPE", "ru_RU")

Sys.setlocale("LC_CTYPE", oldloc)

试试吧,它可能会对你有所帮助。谢谢

【讨论】:

  • @AK88,我正在获取表格,我已将其附在答案中,对于另一个错误,不确定您为什么要尝试使用 Sys.setlocale("LC_CTYPE", "russian") ,但是重新启动 r 然后重新运行
  • 修复了!在 OP 的主体中添加结果表。你知道为什么子栏不显示吗?
  • 我认为这是因为您的 Excel 工作表中合并了单元格,对此进行了讨论。 github.com/tidyverse/readxl/issues/99github.com/tidyverse/readxl/issues/166,对我来说,我在阅读之前已取消合并单元格。我的电脑在合并时导入 Excel 表时冻结了。
  • 嗯...As discussed in #220 and above, it's best to handle these problems via other packages. There are no near term plans to get into merged cell issues here。必须和tidyxl一起玩。