【发布时间】:2021-06-12 19:33:03
【问题描述】:
在 R 中,我有这样的向量:
TEST <- c("BlAA¶schl, G", "ThAA¶ni, A.")
其中BlAA¶schl 应该是Blöschl,ThAA¶ni 应该是Thöni。
整个数据集都存在类似的问题。我不知道它是怎么命名的(可能是“非 ASCII 字符”?)。
基于this response,其他人似乎已经成功尝试过这段代码:
Encoding(TEST) <- 'latin1'
stringi::stri_trans_general(TEST, 'Latin-ASCII')
但就我而言,没有任何变化。
如何将AA¶ 等字符转换为ö?
编辑:关键问题似乎在于 cmets 中提到的 JosefZ 中有一个“双重mojibake”。
编辑 2:我发现这个“UTF-8 Character Debug Tool”包含actual 和expected 列中的一些(不是全部)问题。此外,this "encoding repairer" on GitHub 似乎提供了我需要的东西,但它不是用 R 编写的。
【问题讨论】:
-
这在带有 UTF-8 的 Linux 上运行良好......你的编码是什么?检查 Sys.getenv() 输出?
-
@user12256545,很有趣,谢谢。我使用 Windows。在
Sys.getenv()哪里可以找到我的“编码”? -
你不能,因为它看起来像一个 double mojibake 案例(此外,有些损坏),参见。以下 Python 示例:
'ö'.encode('utf-8').decode('latin1').encode('utf-8').decode('latin1')返回'Ã\x83¶' -
谢谢你的解释,@JosefZ!但如果不可能的话,为什么其他用户(这里的 cmets 中)能够在 Linux 中做到这一点?
-
这适用于我从
TEST <- c("Bl\xf6schl, G", "Thöni, A.")开始。我在 Windows 上Sys.getlocale(category = "LC_ALL")返回[1] "LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252".andstringi::stri_escape_unicode( TEST)返回[1] "Bl\\u00f6schl, G" "Th\\u00f6ni, A."
标签: r encoding utf-8 stringr stringi