0

通常のフラグを使用して、wgetを使用してファイルをext2パーティションに保存しています。名前の取得に失敗することがあります。

s = `find "#{@dir}" -type f -printf "%T@\t::::\t%s\t::::\t%p\n" |sort`
s.each_line {|l|
   file_name = l.chomp.split("\t::::\t")[2] #=> 
   # ...66:in `split': invalid byte sequence in UTF-8 (ArgumentError)
}

テスト:

l.encoding #=> UTF-8
l.valid_encoding #=> false
l.inspect #=> "...St. Paul\xE2%80%99s Cathedral..."
Iconv.conv('utf-8', 'utf-8', l) #=> 
# ...77:in `conv': "\xE2%80%99s Cathedr"... (Iconv::IllegalSequence)

ファイル名を取得してファイルを削除するにはどうすればよいですか?

言及するのを忘れました、bashではファイルは次のようになります:

index.php?attTag=St. Paul?%80%99s Cathedral

この文字列をlsに貼り付けると、そのようなファイルやディレクトリは返されません。

4

1 に答える 1

1

CGI.unescape変換を実行する前に試すことができます...

a = "...St. Paul\xE2%80%99s Cathedral..."
puts a

require 'cgi'
b = CGI.unescape a
puts b

require 'iconv'
c = Iconv.conv('UTF-8//TRANSLIT', 'UTF-8', b) # may not even be necessary
puts c

私の ruby​​-1.9.2-p180 での出力:

...St. Paul?%80%99s Cathedral...
...St. Paul’s Cathedral...
...St. Paul’s Cathedral...
于 2011-07-22T19:50:44.267 に答える