2017-03-06 5 views
0

引数としてсyrillicからディレクトリ名を取得します。引数としてディレクトリ名を取得します。

ガーベッジを削除する方法はありません。 例:プログラムの引数としてのパス/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

これは囲碁コードの問題ではありませんが、あなたのプログラムにそれを渡すか、二重引用符でパスを渡してみてください"…"

./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とは関係ありません。これはキリル文字とは関係がありません。シェルがコマンドラインを解析する方法です。引数を区切るのにスペースを使用しています。 「(二重引用符で文字を囲むと

$ 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

:オーバーライドする二重引用符( ")で引数を囲み例えば、

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()) 
} 

が出力されます。 "')は、リテラル の値をすべての文字のうち保存しますe [いくつかの例外を除いて]引用符で囲みます。

関連する問題