如何删除不可打印的字符

2023-12-28

我正在尝试从 Golang 中的字符串中删除不可打印的字符。

https://play.golang.org/p/Touihf5-hGH https://play.golang.org/p/Touihf5-hGH

invisibleChars := "Douglas​"
fmt.Println(invisibleChars)
fmt.Println(len(invisibleChars))

normal := "Douglas"
fmt.Println(normal)
fmt.Println(len(normal))

Output:

Douglas​
10
Douglas
7

第一个字符串末尾有一个不可见的字符。

我尝试替换非 ASCII 字符,但它也删除了重音符号。

如何仅删除不可打印的字符?


前言:我在我的github.com/icza/gox https://github.com/icza/gox图书馆,参见stringsx.Clean() https://godoc.org/github.com/icza/gox/stringsx#Clean.


你可以在哪里删除符文unicode.IsGraphic() https://golang.org/pkg/unicode/#IsGraphic or unicode.IsPrint() https://golang.org/pkg/unicode/#IsPrint报道不实。删除某些runes 来自字符串,您可以使用strings.Map() https://golang.org/pkg/strings/#Map.

例如:

invisibleChars := "Douglas​"
fmt.Printf("%q\n", invisibleChars)
fmt.Println(len(invisibleChars))

clean := strings.Map(func(r rune) rune {
    if unicode.IsGraphic(r) {
        return r
    }
    return -1
}, invisibleChars)

fmt.Printf("%q\n", clean)
fmt.Println(len(clean))

clean = strings.Map(func(r rune) rune {
    if unicode.IsPrint(r) {
        return r
    }
    return -1
}, invisibleChars)

fmt.Printf("%q\n", clean)
fmt.Println(len(clean))

这个输出(尝试一下去游乐场 https://play.golang.org/p/7HS2J2pIDvs):

"Douglas\u200b"
10
"Douglas"
7
"Douglas"
7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除不可打印的字符 的相关文章

  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 如何判断文件夹是否存在并且可写?

    我想要func FolderExists path string bool这将告诉文件夹是否存在并且可写 我已经到了这里 func FolderExists path string bool info err os Stat path re
  • 将 unicode 转换为 html 实体十六进制

    如何将 Unicode 字符串转换为 HTML 实体 HEX非十进制 例如 转换Fran ais to Fran xE7 ais 对于缺少的十六进制编码相关问题 https stackoverflow com a 11310258 3674
  • C++ std::string 到 jstring 具有固定长度

    我正在尝试将 C std string 转换为 jstring 并返回它 这很容易 JNIEnv gt NewStringUTF stdString c str 但问题是我正在转换的字符串中几乎随机散布着空字符 这是一个问题c str 但不
  • Go 中的 Map 与 Switch 性能对比

    考虑这个基准 我们比较地图访问与切换 var code int32 0 10 100 100 0 10 0 10 100 14 1000 100 1000 0 0 10 100 1000 10 0 1000 12 var mapCode m
  • 如何分发 Go 应用?

    我用 Go 编写了一个应用程序 它有两个外部依赖项需要在编译之前满足 在 Go 生态系统中 打包此应用程序以实现简单安装过程 包括安装这些远程依赖项 的最佳方法是什么 用户将如何安装我的应用程序 如果您期望用户编译您的应用程序 并且该应用程
  • 为什么反斜杠出现两次?

    当我创建包含反斜杠的字符串时 它们会重复 gt gt gt my string why does it happen gt gt gt my string why does it happen Why 你所看到的是表示 of my stri
  • 打印字符串有困难

    当我运行该程序时 第二个printf prints string2与扫描到的任何内容string1附在最后 e g 123被扫描到string1然后它打印 Is before 12ab123 相对于12ab 为什么不只是 12ab char
  • 在 docker 中为 docker golang api 的容器设置端口

    我期待使用 docker golang api 做下面这样的事情 cmd docker run t i p 8989 8080 image name bin bash 我也在使用golang sdkhttps github com moby
  • 如何在 PHP 中按字母顺序比较 2 个字符串?

    标题说什么 具体来说 如果我有 array1 name zoo array2 name fox 我怎样才能确定按字母顺序排列 array2的名字应该出现在上面 array1 s Use strcmp http www php net str
  • SQL LIKE 的 C# 版本

    有没有办法在 C 中搜索字符串中的模式 像 Sql LIKE 这样的东西会非常有用 正则表达式允许一切LIKE允许以及更多 但具有完全不同的语法 然而 由于规则LIKE是如此简单 其中 表示零个或多个字符 并且 表示一个字符 并且两者LIK
  • 将长文本分成页面供viewpager使用

    我正在实施中的messureText方法这个问题 https stackoverflow com a 22199847 3930169在 viewpager 中渲染之前将长文本分成指定大小的页面 我正在使用增量字符数进行 while 循环以
  • Golang func main() 在除 main 之外的包中?

    在这种情况下 例如helloworld 包的名称是 main 还有一个func main 陈述 但我也看到过代码func main 这是在其他一些包中 然而 该代码似乎可以用作独立程序 那么拥有一个意味着什么func main 带有除以下之
  • stringWithUTF8String 的“不完整的通用字符名称”

    当我尝试将 utf 8 字符串转换为 NSString 时 如下所示 NSString s NSString stringWithUTF8String U0627 U0644 U0641 U0631 U0646 NSLog s 我收到编译错
  • Perl 和 MySql 中的 utf8 编码

    我的数据库 MySql 有 utf8 general 排序规则 我正在从数据库访问数据并显示一个网页 用 Perl 开发 它显示瑞典语字符 和不同的字符 我检查了Mysql数据库 在那里我可以看到其中包含 字符的数据 看来 访问数据时存在编
  • DocumentBuilder 解析产生无效字节 2 of 4 字节 UTF-8 序列错误

    我正在尝试解析包含字符串的字节数组Impresi n in XML final DocumentBuilderFactory builderFactory DocumentBuilderFactory newInstance final D
  • 使用 git 签入对 UTF8 BOM 的更改

    我不小心从 Windows 签入了一个 utf8 编码的文本文件 之前没有删除 BOM 现在我尝试在更高版本中删除它并再次签入此更改 git 似乎忽略了 BOM 字节的更改 是否有一个设置可以让 git 让我按原样签入文件 我知道在行结尾方
  • 用零向左填充字符串[重复]

    这个问题在这里已经有答案了 我见过类似的问题here https stackoverflow com questions 388461 padding strings in java and here https stackoverflow
  • 如何附加到二维切片

    我有逐行 6 列创建的数据 我事先不知道最终的行数 目前 我正在创建一个全为零的 200x6 二维切片 然后我逐渐用我的数据逐行替换这些零 数据来自另一个数据框 df 它有效 但我不喜欢最终我的切片的最后一行全是零 我看到两种解决方案 完成
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每

随机推荐