英文:
Go obtain a directory name as an argument
问题
获取一个以 Cyrillic 字符作为参数的目录名称
如何获取完整路径,而不是截断的垃圾信息。
示例:作为程序参数的路径 /home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/
我得到的是修剪过的版本,如何修复?
/Home/spouk/spouk.download/torrent/Сергей
简单代码示例
package main
import (
"flag"
"fmt"
)
func main() {
wordPtr := flag.String("path", "foo", "a string")
flag.Parse()
fmt.Printf("Flag: -path=`%v`\nflag.Args: %v\n", *wordPtr, flag.Args())
fmt.Printf("Rune: %v\n", []rune(*wordPtr))
}
英文:
Go obtain a directory name from the сyrillic as an argument
How to get the full path, not cut garbage.
Example: The path as a program argument /home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/
I get in the trimmed version of the program, how to fix?
/Home/spouk/spouk.download/torrent/Сергей
example simple code
package main
import (
"flag"
"fmt"
)
func main() {
wordPtr := flag.String("path", "foo", "a string")
flag.Parse()
fmt.Printf("Flag: -path=`%v`\nflag.Args: %v\n", *wordPtr, flag.Args())
fmt.Printf("Rune: %v\n", []rune(*wordPtr))
}
答案1
得分: 4
这不是Go代码的问题,而是如何将其传递到程序中的问题,请尝试使用双引号 "…"
将路径传递进去。
./main -path="/home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/"
> Flag: -path=`/home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/`
> flag.Args: []
> Rune: [47 104 111 109 101 47 115 112 111 117 107 47 115 112 111 117 107 46 100 111 119 110 108 111 97 100 47 116 111 114 114 101 110 116 47 1057 1077 1088 1075 1077 1081 32 1051 1091 1082 1100 1103 1085 1077 1085 1082 1086 44 32 1057 1086 1073 1088 1072 1085 1080 1077 32 1089 1086 1095 1080 1085 1077 1085 1080 1081 47]
英文:
This is not a matter of the Go code but how you pass it into your program, try passing the path in double quotes "…"
./main -path="/home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/"
> Flag: -path=`/home/spouk/spouk.download/torrent/Сергей Лукьяненко, Собрание сочинений/`
> flag.Args: []
> Rune: [47 104 111 109 101 47 115 112 111 117 107 47 115 112 111 117 107 46 100 111 119 110 108 111 97 100 47 116 111 114 114 101 110 116 47 1057 1077 1088 1075 1077 1081 32 1051 1091 1082 1100 1103 1085 1077 1085 1082 1086 44 32 1057 1086 1073 1088 1072 1085 1080 1077 32 1089 1086 1095 1080 1085 1077 1085 1080 1081 47]
答案2
得分: 3
这与Go语言无关,也与西里尔字母无关。这是关于shell如何解析命令行的问题。它使用空格来分隔参数。使用双引号(")来覆盖参数。例如,
package main
import (
"flag"
"fmt"
"os"
)
func main() {
fmt.Printf("os.Args: %q\n", os.Args[1:])
wordPtr := flag.String("path", "foo", "a string")
flag.Parse()
fmt.Printf("flag.path: %q\n", *wordPtr)
fmt.Printf("flag.Args: %q\n", flag.Args())
}
输出:
$ go run path.go -path=/home/spouk/Сергей Лукьяненко, Собрание сочинений/
os.Args: ["-path=/home/spouk/Сергей" "Лукьяненко," "Собрание" "сочинений/"]
flag.path: "/home/spouk/Сергей"
flag.Args: ["Лукьяненко," "Собрание" "сочинений/"]
$ go run path.go -path="/home/spouk/Сергей Лукьяненко, Собрание сочинений/"
os.Args: ["-path=/home/spouk/Сергей Лукьяненко, Собрание сочинений/"]
flag.path: "/home/spouk/Сергей Лукьяненко, Собрание сочинений/"
flag.Args: []
> Bash参考手册
>
> 3.1.2.3 双引号
>
> 使用双引号(‘"’)将字符括起来可以保留引号内所有字符的字面值[有一些例外]。
英文:
This has nothing to do with Go. This has nothing to do with cyrillic. It is how the shell parses the command line. It is using spaces to separate arguments. Enclose the argument in double quotes (") to override. For example,
package main
import (
"flag"
"fmt"
"os"
)
func main() {
fmt.Printf("os.Args: %q\n", os.Args[1:])
wordPtr := flag.String("path", "foo", "a string")
flag.Parse()
fmt.Printf("flag.path: %q\n", *wordPtr)
fmt.Printf("flag.Args: %q\n", flag.Args())
}
Output:
$ go run path.go -path=/home/spouk/Сергей Лукьяненко, Собрание сочинений/
os.Args: ["-path=/home/spouk/Сергей" "Лукьяненко," "Собрание" "сочинений/"]
flag.path: "/home/spouk/Сергей"
flag.Args: ["Лукьяненко," "Собрание" "сочинений/"]
$ go run path.go -path="/home/spouk/Сергей Лукьяненко, Собрание сочинений/"
os.Args: ["-path=/home/spouk/Сергей Лукьяненко, Собрание сочинений/"]
flag.path: "/home/spouk/Сергей Лукьяненко, Собрание сочинений/"
flag.Args: []
> Bash Reference Manual
>
> 3.1.2.3 Double Quotes
>
> Enclosing characters in double quotes (‘"’) preserves the literal
> value of all characters within the quotes [with some exceptions].
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论