0

ファイルのエンコーディングに少し問題があります。

「sometext%C3%B3 + more +%26 + andmore」のようなURLエンコードされた文字列を受け取り、エスケープを解除してデータを処理し、windows-1252エンコードで保存します。

変換は次のとおりです。

irb(main) >> value
=> "sometext%C3%B3+more+%26+andmore"
irb(main) >> CGI::unescape(value)
=> "sometext\303\263 more & andmore"
irb(main) >> #Some code and saved into a file using open(filename, "w:WINDOWS-1252")
irb(main) >> # result in the file:
=> sometextĂ³ more & andmore

そして結果はsometextó more & andmore

4

1 に答える 1

4

エンコーディングのサポートがRuby1.9に追加されたため、次のコードはRuby1.9.1のものです。

require 'cgi'
#=> true
s = "sometext%C3%B3+more+%26+andmore"
#=> "sometext%C3%B3+more+%26+andmore"
t = CGI::unescape s
#=> "sometext\xC3\xB3 more & andmore"
t.force_encoding 'utf-8' # telling Ruby that the string is UTF-8 encoded
#=> "sometextó more & andmore"
t.encode! 'windows-1252' # changing encoding to windows-1252
#=> "sometext? more & andmore"
# here you do whatever you want to do with windows-1252 encoded string

ここには、Rubyとエンコーディングに関する多くの情報があります。

PS。Ruby 1.8.7にはエンコーディングのサポートが組み込まれていないため、変換には外部ライブラリを使用する必要があります。たとえば、iconv

require 'iconv'
#=> true
require 'cgi'
#=> true
s = "sometext%C3%B3+more+%26+andmore"
#=> "sometext%C3%B3+more+%26+andmore"
t = CGI::unescape s
#=> "sometext\303\263 more & andmore"
Iconv.conv 'windows-1252', 'utf-8', t
#=> "sometext\363 more & andmore"
# \363 is ó in windows-1252 encoding
于 2010-05-28T12:54:28.853 に答える