下面的测试程序使用具有类似 \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"
森林海
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 符文,因为我最初期望得到它。通过几行代码,用户输入现在与操作系统无关。
- 2 回答
- 0 关注
- 130 浏览
添加回答
举报
0/150
提交
取消