R 脚本中的 ASCII 字符 - 尽管编码为 UTF-8,但文本输出将它们转换为其他字符
ASCII characters in R script - text output converts them to other characters despite encoding UTF-8
使用 Windows 10、R 4.0.3 和 RStudio 1.4.1103
我有一个脚本(由开发人员编写),其输出是一种 txt 格式的树图。这段代码是:
for (index in seq_len(nrow(file))) {
write(paste0(path, if (index == nrow(file)) '└' else '├' , '──', file[index, 'name']), tree_filename, append = TRUE)
newPath = if (index == nrow(file)) paste0(path, ' ') else paste0(path, '│ ')
treefunction(file[index, id_column_header], newPath)}
字符 │ 和 └ 在代码中输入时正确显示在 RStudio 中。然而,当函数的输出保存在 .txt 中时,这些字符对我来说变成了 + 和 - ,而对开发人员来说一切都完美无缺(请参见下图的两个输出)。
到目前为止我已经尝试过:我在 .RProfile 中设置了 utf-8 并且 .txt 文件 是 编码为 utf-8(我已经检查过)。
开发者正在使用 linux(我不确定是哪个版本)。
有人可以帮助我应该做什么,以便 └ 类型的字符显示正常吗?
非常感谢。
首先,我很同情你。在 Windows 上编码是一场噩梦。 R Core 团队中有一个叫 Tomas Kalibera 的人正在努力解决这个问题。大概在未来一年左右的时间会有很大的改善。 Here 是一个 link,解释了他将如何修复它。
其次,我认为您现在可以通过对编写字符串的方式进行一些更改来解决您的问题:
使用 Unicode 字符代码而不是直接字符串。这些代码被称为“框绘图代码”。可以找到完整列表和更多信息 here。
用encoding = 'native.enc'
打开你的文件
使用 writeLines
而不是带有 useBytes = TRUE
选项的 write
。
这是一个例子:
f <- file("test.txt", open = "w", encoding = "native.enc")
writeLines("\U251C\U2500\U2500 Herr Dvorek Frank von Lakatos", f, useBytes = TRUE)
writeLines("\U2502 \U2514\U2500\U2500 Dr Maria Lakatos", f, useBytes = TRUE)
close(f)
Notepad++ 中的结果如下所示:
我和你在同样的环境中工作。所以我认为这应该可行。
如果你需要读回文件,使用这个:
mylines <- readLines("test.txt", encoding = "UTF-8")
使用 Windows 10、R 4.0.3 和 RStudio 1.4.1103
我有一个脚本(由开发人员编写),其输出是一种 txt 格式的树图。这段代码是:
for (index in seq_len(nrow(file))) {
write(paste0(path, if (index == nrow(file)) '└' else '├' , '──', file[index, 'name']), tree_filename, append = TRUE)
newPath = if (index == nrow(file)) paste0(path, ' ') else paste0(path, '│ ')
treefunction(file[index, id_column_header], newPath)}
字符 │ 和 └ 在代码中输入时正确显示在 RStudio 中。然而,当函数的输出保存在 .txt 中时,这些字符对我来说变成了 + 和 - ,而对开发人员来说一切都完美无缺(请参见下图的两个输出)。
到目前为止我已经尝试过:我在 .RProfile 中设置了 utf-8 并且 .txt 文件 是 编码为 utf-8(我已经检查过)。
开发者正在使用 linux(我不确定是哪个版本)。 有人可以帮助我应该做什么,以便 └ 类型的字符显示正常吗? 非常感谢。
首先,我很同情你。在 Windows 上编码是一场噩梦。 R Core 团队中有一个叫 Tomas Kalibera 的人正在努力解决这个问题。大概在未来一年左右的时间会有很大的改善。 Here 是一个 link,解释了他将如何修复它。
其次,我认为您现在可以通过对编写字符串的方式进行一些更改来解决您的问题:
使用 Unicode 字符代码而不是直接字符串。这些代码被称为“框绘图代码”。可以找到完整列表和更多信息 here。
用
打开你的文件encoding = 'native.enc'
使用
writeLines
而不是带有useBytes = TRUE
选项的write
。
这是一个例子:
f <- file("test.txt", open = "w", encoding = "native.enc")
writeLines("\U251C\U2500\U2500 Herr Dvorek Frank von Lakatos", f, useBytes = TRUE)
writeLines("\U2502 \U2514\U2500\U2500 Dr Maria Lakatos", f, useBytes = TRUE)
close(f)
Notepad++ 中的结果如下所示:
我和你在同样的环境中工作。所以我认为这应该可行。
如果你需要读回文件,使用这个:
mylines <- readLines("test.txt", encoding = "UTF-8")