如何将Ab9876543210
转换为Ab9876543210
?是否有正则表达式的解决方案?感谢。
test <- dput("Ab9876543210")
答案 0 :(得分:1)
免责声明:以下内容适用于我的机器,但由于我无法仅根据提供的示例复制您的全宽字符串,因此根据我的问题版本(粘贴将字符串转换为文本文件,使用UTF-8编码保存,并使用指定为UTF-8的编码加载。
第1步。阅读文本(我添加了半宽版本进行比较):
> test <- readLines("fullwidth.txt", encoding = "UTF-8")
> test
[1] "Ab9876543210" "Ab9876543210"
第2步。验证完整&amp;半宽版本不相等:
# using all.equal()
test1 <- test[1]
test2 <- test[2]
> all.equal(test1, test2)
[1] "1 string mismatch"
# compare raw bytes
> charToRaw(test1)
[1] ef bb bf ef bc a1 62 ef bc 99 ef bc 98 ef bc 97 ef bc 96 ef bc 95 ef
[24] bc 94 ef bc 93 ef bc 92 ef bc 91 ef bc 90
> charToRaw(test2)
[1] 41 62 39 38 37 36 35 34 33 32 31 30
对于任何感兴趣的人,如果将原始字节版本粘贴到utf-8 decoder作为十六进制输入,那么除了字母b(从第7个字节中的62映射)之外,您将看到其余字母由3字节序列组成。此外,第一个3字节序列映射到&#34; ZERO WIDTH NO-BREAK SPACE字符&#34;,因此当您将字符串打印到控制台时它不可见。
第3步。使用Nippon
包从全宽度转换为半宽:
library(Nippon)
test1.converted <- zen2han(test1)
> test1.converted
[1] "Ab9876543210"
# If you want to compare against the original test2 string, remove the zero
# width character in front
> all.equal(substring(test1.converted, 2), test2)
[1] TRUE