cmd 中的 UTF-8 无点 i

问题描述 投票:0回答:2

我有一个用 utf-8 编码的 R 脚本。在Rstudio中运行时,土耳其语字符没有问题。但是,当我尝试从 cmd 运行它时,它会抛出错误:

ÜrünAçiklama
HataTanimi
不存在。

它给出了这个错误,因为我的数据框有列“

ÜrünAçıklama
”和“
HataTanımı
”。

可以看到,字符“Ü,ü,Ç”没有问题,但无点 i (ı) 有问题。我在 cmd 中使用这一行运行脚本

Rscript --encoding="UTF-8" myscript.r

我的操作系统是windows10

我该怎么办?预先感谢。

编辑: 举个例子应该没问题。 这是我的数据集。当我尝试删除重复行时,我无法到达包含 dotless i 的列。您可以使用以下脚本在自己的 cmd 中尝试。

library(readxl)

rm(list = ls())
shell("cls") 

df <- read_excel("stackoverflow.xlsx")
df$ÜrünNo
df$ÜrünAçıklama
df$HataTanımı
df$HataZamanı

df_nd <- df[!duplicated(df[,c("ÜrünNo","ÜrünAçıklama","HataZamanı")]),]

这也是我的 CMD 输出:

[1] 1 2 3 3 4
[1] "X" "Y" "Z" "Z" "Q"
[1] "A" "B" "C" "C" "D"
[1] 10 11 12 12 13
Error in `vectbl_as_col_location()`:
! Can't subset columns past the end.
x Columns `ÜrünAçiklama` and `HataZamani` don't exist.
Backtrace:
     x
  1. +-df[!duplicated(df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")])]
  2. +-tibble:::`[.tbl_df`(...)
  3. +-base::duplicated(df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")])
  4. +-df[, c("ÜrünNo", "ÜrünAçiklama", "HataZamani")]
  5. \-tibble:::`[.tbl_df`(df, , c("ÜrünNo", "ÜrünAçiklama", "HataZamani"))
  6.   \-tibble:::vectbl_as_col_location(...)
  7.     +-tibble:::subclass_col_index_errors(...)
  8.     | \-base::withCallingHandlers(...)
  9.     \-vctrs::vec_as_location(j, n, names)
 10.       \-vctrs `<fn>`()
 11.         \-vctrs:::stop_subscript_oob(...)
 12.           \-vctrs:::stop_subscript(...)
 13.             \-rlang::abort(...)
Execution halted

如您所见,我可以一一到达列,但是当我尝试删除重复行时,它只是说列不存在。

r cmd utf-8 locale
2个回答
1
投票

我在做研究的时候,遇到了这句话。

R 4.2 for Windows will support UTF-8 as native encoding, which will be a major improvement in encoding support, allowing Windows R users to work with international text and data.

后来我才意识到我用的是4.1。更新 R 是最简单、最快的解决方案。抱歉给您带来不便。


0
投票

问题是 utf-8 既不独立于语言环境,也不独立于表示。例如您可以在脚本中使用 dotless i char,但数据集可能已保存 i+a dotless 修饰符。这些在直接比较中会显示出不同。

在比较 utf-8 字符串之前,您应该使用特殊的库。或提前标准化

© www.soinside.com 2019 - 2024. All rights reserved.