为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
尚方宝剑之说 2022-05-23 18:11:42
下面的测试程序使用具有类似 \u00FC 的代码点的 DEFAULT 字符串,以及如果该类型的代码点在 prog. 从 cmd 行传递相同的字符串,例如: prog.exe -input="ABC\u00FC" 不会。我认为这是操作系统交互,所以尝试了其他引用,甚至像这样包装:“(ABC \ u00FC)”并修剪func NG内的括号。对于转义值,“for _, runeRead := range []rune”是否不正确?package mainimport (        "fmt"        "flag"        "os")var input stringvar 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。
查看完整描述

2 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

https://ss64.com/nt/syntax-esc.html

^ 转义字符。

在命令符号前添加转义字符可以将其视为普通文本。当管道或重定向任何这些字符时,您应该使用转义字符作为前缀:& \ < > ^ |

e.g.  ^\  ^&  ^|  ^>  ^<  ^^

所以你应该做

prog.exe -input="ABC^\u00FC"


查看完整回答
反对 回复 2022-05-23
?
森林海

TA贡献2011条经验 获得超2个赞

以防它帮助别人

显然,不同的操作系统和/或外壳(在我的情况下是 bash)对 unicode 字符的“\u”有问题。在 bash 的 cmd 行中,用户可以输入 $' the characters' 来保护 \u。有人建议,如果一个字符串与 strconv.Quote 可能是一个解决方案相同的问题,则在程序内。

因为我想要一个面向非计算机用户的操作系统/shell 独立解决方案,所以我做了一个稍微复杂的解决方法。

我告诉用户输入需要 \u 格式的 unicode 以使用 %FC 而不是 \u00FC。我从命令行解析字符串,即使用 rexexp 的 ABC%FC%F6123,在我的 GO 代码中,我将 %xx 替换为 unicode 符文,因为我最初期望得到它。通过几行代码,用户输入现在与操作系统无关。


查看完整回答
反对 回复 2022-05-23
  • 2 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信