2017-03-06 13 views
0

從сyrillic獲取一個目錄名作爲參數Go獲取一個目錄名作爲參數

如何獲取完整路徑,而不是剪切垃圾。 例如:作爲程序參數的路徑/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)) 
} 

回答

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] 
+0

是的。爲什麼只有翻譯人員用雙引號才能正確理解?嗯,在這個規範可能更多的地方閱讀? 代碼'flag'和'os.Args'對此無言。 – Spouk

3

這與Go無關。這與西里爾文無關。它是如何解析命令行的。它使用空格來分隔參數。括在雙引號(「)來覆蓋該參數例如,

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 Reference Manual

3.1.2.3 Double Quotes

圍字符(」 「')保留第th個字符的字面值 引號[有一些例外]。