Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何让函数检测字符串是否是二进制安全的_String_Go - Fatal编程技术网

String 如何让函数检测字符串是否是二进制安全的

String 如何让函数检测字符串是否是二进制安全的,string,go,String,Go,如何检测字符串是否是二进制安全的 类似于以下的函数: IsBinarySafe(str) //returns true if its safe and false if its not. 在此之后的任何评论都只是我想或试图解决的问题: 我认为一定有一个图书馆已经在做这件事了,但很难找到它。如果没有,您如何实现这一点 我在考虑一些解决方案,但并不确信它们是好的解决方案。 其中之一是迭代字节,并拥有所有非法字节序列的哈希映射。 我还考虑过可能编写一个包含所有非法字符串的正则表达式,但不确定这是否

如何检测字符串是否是二进制安全的

类似于以下的函数:

IsBinarySafe(str) //returns true if its safe and false if its not.
在此之后的任何评论都只是我想或试图解决的问题:


我认为一定有一个图书馆已经在做这件事了,但很难找到它。如果没有,您如何实现这一点

我在考虑一些解决方案,但并不确信它们是好的解决方案。 其中之一是迭代字节,并拥有所有非法字节序列的哈希映射。 我还考虑过可能编写一个包含所有非法字符串的正则表达式,但不确定这是否是一个好的解决方案。 我也不确定来自其他语言的字节序列是否算作二进制安全。举一个典型的golang例子:

世界
将:

IsBinarySafe(世界) //true or false?
它会返回真还是假?我假设所有二进制安全字符串应该只使用1个字节。因此,在中对其进行迭代:

const nihongo=”日本語abc日本語"
对于i,w:=0,0;i

当宽度大于1时返回false。这些只是我的一些想法,以防没有类似的库,但我不确定。

二进制安全性与字符的宽度无关,主要是检查或多或少的不可打印字符,如空字节等

发件人:

二进制安全是一个计算机编程术语,主要用于连接 使用字符串操作函数。可以使用二进制安全函数 本质上是一种将其输入视为原始数据流而无需 任何特定格式。因此,它应适用于所有256个可能的值 一个字符可以接受的(假定为8位字符)

我不确定您的目标是什么,现在几乎所有语言都可以处理utf8/16,但是对于您的具体问题,有一个相当简单的解决方案:

// checks if s is ascii and printable, aka doesn't include tab, backspace, etc.
func IsAsciiPrintable(s string) bool {
    for _, r := range s {
        if r > unicode.MaxASCII || !unicode.IsPrint(r) {
            return false
        }
    }
    return true
}

func main() {
    fmt.Printf("len([]rune(s)) = %d, len([]byte(s)) = %d\n", len([]rune(s)), len([]byte(s)))

    fmt.Println(IsAsciiPrintable(s), IsAsciiPrintable("test"))
}

发件人:

iPrint报告符文是否定义为可由Go打印 字符包括字母、标记、数字、标点符号、符号和符号 ASCII空格字符,来自类别L、M、N、P、S和ASCII 空格字符。此分类与IsGraphic相同,只是 唯一的间距字符是ASCII空格,U+0020


二进制安全性与字符的宽度无关,它主要是或多或少地检查不可打印字符,如空字节等

发件人:

二进制安全是一个计算机编程术语,主要用于连接 使用字符串操作函数。可以使用二进制安全函数 本质上是一种将其输入视为原始数据流而无需 任何特定格式。因此,它应适用于所有256个可能的值 一个字符可以接受的(假定为8位字符)

我不确定您的目标是什么,现在几乎所有语言都可以处理utf8/16,但是对于您的具体问题,有一个相当简单的解决方案:

// checks if s is ascii and printable, aka doesn't include tab, backspace, etc.
func IsAsciiPrintable(s string) bool {
    for _, r := range s {
        if r > unicode.MaxASCII || !unicode.IsPrint(r) {
            return false
        }
    }
    return true
}

func main() {
    fmt.Printf("len([]rune(s)) = %d, len([]byte(s)) = %d\n", len([]rune(s)), len([]byte(s)))

    fmt.Println(IsAsciiPrintable(s), IsAsciiPrintable("test"))
}

发件人:

iPrint报告符文是否定义为可由Go打印 字符包括字母、标记、数字、标点符号、符号和符号 ASCII空格字符,来自类别L、M、N、P、S和ASCII 空格字符。此分类与IsGraphic相同,只是 唯一的间距字符是ASCII空格,U+0020


“二进制安全”是什么意思?UTF-8字符串,如
“日本語“
现在在Go和大多数互联网标准中都很好。(Go和UTF-8的设计师Rob Pike也发了一篇博文:)有些字符需要超过一个字节甚至符文,但这没关系。如果有特定情况下,
”日本語“
不起作用,问问这个问题:应该有办法让它起作用,如果没有,我们可以在了解情况后提供更多的指导。@topskip根据维基百科:
二进制安全是一个计算机编程术语,主要用于与字符串操作函数相关。二进制安全函数本质上是一个处理其inpu的函数t是一个原始数据流,没有任何特定的格式。因此,它应该可以处理一个字符可以接受的所有256个可能的值(假设为8位字符).
@CharlieParker好的,那么我想说你不需要做任何特殊的事情,因为Go默认是二进制安全的。Go不需要任何特殊设置来处理所有256个不同的字节值,字符串只是字节的串联。“二进制安全”是什么意思?UTF-8字符串,如
”日本語“
现在在Go和大多数互联网标准中都很好。(Go和UTF-8的设计师Rob Pike也发了一篇博文:)有些字符需要超过一个字节甚至符文,但这没关系。如果有特定情况下,
”日本語“
不起作用,问问这个问题:应该有办法让它起作用,如果没有,我们可以在了解情况后提供更多的指导。@topskip根据维基百科:
二进制安全是一个计算机编程术语,主要用于与字符串操作函数相关。二进制安全函数本质上是一个处理其inpu的函数t是一个原始数据流,没有任何特定的格式。因此,它应该可以处理一个字符可以接受的所有256个可能的值(假设为8位字符).
@CharlieParker好的,那么我想说你不需要做任何特殊的事情,因为Go默认是二进制安全的。Go不需要任何特殊设置来处理所有256个不同的字节值,字符串只是字节的串联。现在我想起来了,我想我的困惑之一是,我甚至认为我知道什么是“二进制安全的”是的,我从来并没有见过一个非二进制安全的字符列表(“非法”)。我看到您的代码在我期望的一些输入上工作,但我如何确定它在所有二进制不安全字符串上工作?谢谢,顺便说一句!因为