我知道之前曾有人问过这个问题,但是经过很长一段时间的搜索,我没有找到满足我需求的答案。有关该主题的所有其他帖子的解决方案是对特殊字符进行编码或将其完全删除,因此我认为这不是重复的。
我有很多来自不同来源的文件,它们的编码方式都不同。因此,我想“按原样”读取所有字符串(忽略转义),以便在清理数据后可以正确地映射它们。作为映射的一部分,我将所有字符都更改为小写,但tolower
不适用于转义字符。
错误示例:
tolower("ThIs d\xf6ESn't W\xf6Rk")
>>> Error in tolower("ThIs d\xf6ESn't W\xf6Rk") : invalid multibyte string 1
我意识到我可以更改编码以消除错误,但是就像我之前说的,我不想转换字符,因为没有一种编码可以对所有来源都适用。我需要按原样读取字符串。
E.G。这是不可接受的:
tolower(iconv("ThIs d\xf6ESn't W\xf6Rk", "WINDOWS-1252", "UTF-8"))
>>> "this döesn't wörk"
或者,如果有一种简单的方法可以将“ö”改回“ \ xf6”,那么也许可以接受。
最终,我想要的是这个
NEWtolower("ThIs d\xf6ESn't W\xf6Rk")
>>> "this d\xf6esn't w\xf6rk"
是否有一种简单的方法可以忽略转义符?作为一个技巧,我想通过循环遍历每个字符,将其转换为小写字母,然后将这些字符重新放在一起来重新创建字符串。但是即使nchar("ThIs d\xf6ESn't W\xf6Rk")
也会给我一个错误,所以我真的不知道该怎么办。
必须有一种简单的方法来忽略转义,对吗? read.csv()
有一个allowEscapes = TRUE
选项。任何可行的方法都可以接受。