猿问

包含转义符文的 GO 标志 pkg 读取选项字符串(如“\u00FC”)不会读取

下面的测试程序使用具有类似 \u00FC 的代码点的 DEFAULT 字符串,以及如果该类型的代码点在 prog. 从 cmd 行传递相同的字符串,例如: prog.exe -input="ABC\u00FC" 不会。我认为这是操作系统交互,所以尝试了其他引用,甚至像这样包装:“(ABC \ u00FC)”并修剪func NG内的括号。


对于转义值,“for _, runeRead := range []rune”是否不正确?


package main


import (

        "fmt"

        "flag"

        "os"

)


var input string

var m = make(map[rune]struct{})


func init() {

        flag.StringVar(&input, "input", "A7\u00FC", "string of runes")

        m['A'] = struct{}{}

        m['\u00FC'] = struct{}{}

        m['7'] = struct{}{}

}


func main() {

        flag.Parse()

        ck(input)      // cmd line - with default OK

        ck("A\u00FC")  // hard code - OK

}


func ck(in string) {

        for _, runeRead := range []rune(in)  {

                fmt.Printf("DEBUG: Testing rune: %v %v\n", string(runeRead), byte(runeRead))


                if _, ok := m[runeRead]; ! ok {

                        fmt.Printf("\nERROR: Invalid entry <%v>, in string <%s>.\n", string(runeRead), in)

                        os.Exit(9)

                }

        }

}

解决方案需要适用于 windows 和 linux。


尚方宝剑之说
浏览 131回答 2
2回答

素胚勾勒不出你

https://ss64.com/nt/syntax-esc.html^ 转义字符。在命令符号前添加转义字符可以将其视为普通文本。当管道或重定向任何这些字符时,您应该使用转义字符作为前缀:& \ < > ^ |e.g.&nbsp;&nbsp;^\&nbsp;&nbsp;^&&nbsp;&nbsp;^|&nbsp;&nbsp;^>&nbsp;&nbsp;^<&nbsp;&nbsp;^^所以你应该做prog.exe&nbsp;-input="ABC^\u00FC"

森林海

以防它帮助别人显然,不同的操作系统和/或外壳(在我的情况下是 bash)对 unicode 字符的“\u”有问题。在 bash 的 cmd 行中,用户可以输入 $' the characters' 来保护 \u。有人建议,如果一个字符串与 strconv.Quote 可能是一个解决方案相同的问题,则在程序内。因为我想要一个面向非计算机用户的操作系统/shell 独立解决方案,所以我做了一个稍微复杂的解决方法。我告诉用户输入需要 \u 格式的 unicode 以使用 %FC 而不是 \u00FC。我从命令行解析字符串,即使用 rexexp 的 ABC%FC%F6123,在我的 GO 代码中,我将 %xx 替换为 unicode 符文,因为我最初期望得到它。通过几行代码,用户输入现在与操作系统无关。
随时随地看视频慕课网APP

相关分类

Go
我要回答