如何删除不可打印的字符 [英] How to remove non-printable characters

查看:75
本文介绍了如何删除不可打印的字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm trying to remove non-printable characters from a string in Golang.

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))

输出:

Douglas​
10
Douglas
7

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

The first string has an invisible char at the end.

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

I've tried to replace non-ASCII characters, but it removes accents too.

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

How can I remove non-printable characters only?

推荐答案

前言:我在 github.com/icza/gox 库,请参见您可以删除符文,其中 unicode.IsGraphic() unicode.IsPrint() 报告为false.要从字符串中删除某些 rune ,可以使用 字符串.Map() .

You could remove runes where unicode.IsGraphic() or unicode.IsPrint() reports false. To remove certain runes from a string, you may use 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))

此输出(在转到操场上尝试):

"Douglas\u200b"
10
"Douglas"
7
"Douglas"
7

这篇关于如何删除不可打印的字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆