我想比較message[0]
與"CONNECT"
,但它只是失敗:紅寶石比較字符串
puts message[0].dump
->"\x00C\x00O\x00N\x00N\x00E\x00C\x00T\x00"
puts "CONNECT".dump
->"CONNECT"
有人可以解釋我爲什麼?
我想比較message[0]
與"CONNECT"
,但它只是失敗:紅寶石比較字符串
puts message[0].dump
->"\x00C\x00O\x00N\x00N\x00E\x00C\x00T\x00"
puts "CONNECT".dump
->"CONNECT"
有人可以解釋我爲什麼?
消息[0]是不同的編碼
試試這個message[0].encode("UTF-8", :invalid=>:replace, :replace=>"?")
如果不工作,你必須嘗試不同的編碼。我認爲這個答案只適用於1.9。*版本。對於舊版本,我認爲你必須要求iconv
也許這與你的問題無關。它可能只是一個奇怪的字符之間每個字母 –
謝謝,我改變了編碼,但它仍然無法正常工作似乎消息[0] [0]是「\ x00」和消息[0] [1]是「C 「 – dionin
看來你的字符串中有很多NULL字符。最好找出它們來自哪裏,但只要刪除它們就可以使用它。
def remove_null_chrs(str)
str.unpack('C*').select{|x|x != 0}.pack('C*')
end
例如
remove_null_chrs("\x00C\x00O\x00N\x00N\x00E\x00C\x00T\x00")
=> "CONNECT"
它實際上可能是你的輸入是UTF-16,但它會被截斷,因爲最後一個\ x00應該跟着另一個字符。但是爲了說明:'「\ x00C \ x00O \ x00N \ x00N \ x00E \ x00C \ x00T」.force_encoding('UTF-16BE')。encode('UTF-8')#=>「CONNECT」 –
您應該編輯你的答案,而不是發表評論,如果你想添加到它。 –
感謝您的訣竅! :) – dionin
什麼消息的'結果[0] .encoding'? – matt
這看起來像一個UTF-16編碼。你的輸入流,你得到'message'的地方,可能需要定義一個字符集編碼。查看['IO.new']的模式文檔(http://www.ruby-doc.org/core-1.9.3/IO.html#method-cnew)作爲起點,並檢查它們設置編碼的例子。 –
消息[0]是ASCII-8BIT編碼這就是爲什麼我得到所有這些空字符? – dionin