0

JSONでファイルを読み込もうとしていますがRuby、出力が非常に奇妙です。私が使用しているコードは次のとおりです。

require 'rubygems'

class ServiceCalls 

    def initialize ()

    end

    def getFile()

        Dir.entries('./json').each do |mFile|

            if mFile[0,1] != "."
                self.sendServiceRequest(mFile)
            end

        end
    end

    def sendServiceRequest(mFile)
        currentFile = File.new("./json/" + mFile, "r") 
        puts currentFile.read
        currentFile.close
    end



end

mServiceCalls = ServiceCalls.new
mServiceCalls.getFile

出力は次のとおりです。

Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094AA9DAB6D??/??is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG
bookmark88?A[DT>??A?@
                     ApplicationsMAMPhtdocsServiceTestAutomationMDXservicecatalog-verizon.json$4T??
                  `?
                   U?????l??????
                                Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094?is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG
UIEvolutions-MacBook-Pro-109:MDXServiceTesting Banderson$ ruby testmdxservices.rb
bookmark88?A?,P>??A?@
                     ApplicationsMAMPhtdocsServiceTestAutomationMDXservicecatalog-adaptation.json$4T??
                     `?
                      U?????l??????
                                   Macintosh H??=A?v?P$66267945-2481-3907-B88A-1094AA9DAB6D??/?<icns<?TOC his32?s8mic118il32?l8mic1?ic07ic13#ic08#ic14^?ic09_ic1?is32???????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz?????????????????????????????????????????????????????????????????????????????????????????????vvz???????????????????????????????????????????????????????????s8m+88888888???????89????????99?????????9:??????????:;??????????;=??????????=>??????????>????????????@??????????@A??????????AC??????????CD??????????DE??????????EE??????????E6OXdknnkdXO6ic118?PNG

IHDR szz?iCCPICC Profile(?T?k?P??e???:g >h?ndStC??kW??Z?6?!H??m\??$?~?ًo:?w?>?
                                                                             كo{?a???"L?"???4M'S??????9'??^??qZ?/USO???????^C+?hM??J&G@Ӳy???lt?o߫?c՚?
                                                                    ? ??5?"?Y?i\?΁?'&??.?<?ER/?dE?oc?ግ#?f45@?   ??B:K?@8?i??
                  ??s??_???雭??m?N?|??9}p?????_?A??pX6?5~B?$?&???ti??e??Y)%$?bT?3li?
    ??????P???4?43Y???P??1???KF????ۑ??5>?)?@????r??y??????[?:V???ͦ#??wQ?HB??d(??B
                                                                               a?cĪ?L"J??itTy?8?;(???Gx?_?^?[???????%׎??ŷ??Q???麲?ua??n?7???
                                                           Q???H^e?O?Q?u6?S??u
                                                                              ?2??%vX
     ???^?*l
O?????ޭˀq,>??S???%?L??d????B???1CZ??$M??9??P
                                            'w????\/????]???.r#???E|!?3?>_?o?a?۾?d?1Z?ӑ???z???'?=??????~+??cjJ?tO%mN?????
                                         |??-???bW?O+
o?
  ^?
    I?H?.?;???S?]?i_s9?*p???.7U^??s.?3u?

誰かが私が間違っていることを教えてもらえますか? 使用しているエンコードの種類を指定する必要がありますか? getssysread、および覚えていない別のファイルを読み取ろうとしました。

4

2 に答える 2

1

理由は完全にはわかりませんが、「./json」パスが問題を引き起こしていると思います。Windows XP マシンでスクリプトを試してみたところ、同様の結果が得られました。

ただし、スクリプトを書き直してFile.dirname(__FILE__)代わりに含めるように'./'すると、機能しました。また、コードの一部をクリーンアップしました。

class ServiceCalls 

    def get_file
        dirname = File.join(File.dirname(__FILE__), 'json')
        Dir.entries(dirname).each do |file|
            unless file.start_with? '.'
                File.open(File.join(dirname, file), 'r') {|f| puts f.read}
            end
        end
    end
end

sc = ServiceCalls.new
sc.get_file

__FILE__現在のスクリプトのパスです。File.joinシステムに依存しないパス区切りを使用します。File.open、ブロックを渡すと、ブロックが完了すると実際にファイルが閉じられます。を使用して文字列の最初の要素を取得するString#start_with?よりもクリーンな方法です。[0,1]

于 2012-10-04T19:47:05.713 に答える
0

これを試して:

Dir.entries('./json').each do |mFile|
  next if ['.', '..'].include?(mFile)
  self.sendServiceRequest(mFile)
于 2012-10-04T18:19:02.883 に答える