如何用gsub()删除指定空格时保留ASCII>128的非打印字符?
解决方法
问题核心是\\s正则表达式会匹配所有Unicode空白字符,包括你需要保留的ASCII 160(非断空格,对应Unicode U+00A0)。要只删除普通空格(ASCII 32),直接把正则里的\\s替换为普通空格即可:
column_utf8 <- iconv(inData$column, from="ISO-8859-1", to="UTF-8") # 仅删除末尾的普通空格 column_utf8_notrailing <- gsub(" +$", "", column_utf8) # 仅删除竖线前的普通空格 column_utf8_notrailing_noembedded <- gsub(" +\\|", "\\|", column_utf8_notrailing) outData <- data.frame(column_utf8, column_utf8_notrailing_noembedded)
如果需要覆盖更多ASCII类空白(比如制表符、换行符)但仍排除非断空格,可以用[ \\t\\r\\n]替代普通空格,这样只会匹配ASCII范围内的空白字符,不会影响ASCII 160这类扩展字符。
你之前添加useBytes=TRUE后出现ASCII 194,是因为ASCII 160在UTF-8中是双字节编码(0xC2 0xA0),强制按字节处理时仅删除了第二个字节,剩余的0xC2对应ASCII 194,这不是合理的处理方式,因此不要使用该参数。
内容的提问来源于stack exchange,提问作者lb483
相关产品推荐
相关产品推荐

