#ruby-on-rails #ruby #string
#ruby-on-rails #ruby #строка
Вопрос:
У меня есть строка, которая является результатом Ruby on Rails render_to_string
Когда в Ruby debugger это то, что я получаю
pp string.inspect # -> blank
pp string # -> blank
pp string.Class # -> String
pp string.empty? # -> false
pp string.nil? # -> false
pp string.blank? # -> false
pp string.to_s # -> blank
Я знаю, что в строке есть содержимое, потому logger.info string
что возвращает строку, как и ожидалось, но я не знаю, как к ней добраться.
Есть идеи? Спасибо!
РЕДАКТИРОВАТЬ: я понял, что эта проблема очень локализована. Это происходит только тогда, когда я использую ruby-debugger. И это происходит с любой строкой, в которой есть символ процента.
Например, если я создал строку
string = 'this is a string with a % symbol'
строка больше не может быть проверена, распечатана или даже распакована.
Я на Ruby 1.8 и Rails 2.3.
Я думаю, что это может быть лишь частью моего непонимания чего-то мирского в Ruby.
Комментарии:
1. Вероятно, содержит символ новой строки. Что вам
string.length
дает? Также попробуйтеprint "[" string "]"
.. это также должно помочь «увидеть», что содержит строка. Попробуйте использовать что-то другое, кромеpp
, напримерp
,puts
или2. строка. длина возвращает 12045. Это длинная строка. Другие вещи не сработали.
3. Попробуйте определить свои собственные
String.to_s
String.to_str
методы and : возможно, какой-то код перезаписывает их и, следовательно, не выводит данные из методовp
-type . Также попробуйтеp string.display
. Также попробуйте распаковать строку в двоичный массив и распечатать ее и посмотреть, что вы получите.4. Ни
encoding
один метод не подразумевает Ruby 1.8. Вы могли бы попробовать построить быструю гистограмму,hist = s.chars.inject(Hash.new(0)) { |h,c| h[c] = 1; h }
а затем посмотреть, есть ли у вас какие-либо странно выглядящие символы.5. Почему бы просто не поместить их в качестве ответов на вопрос?
Ответ №1:
Похоже, ваша строка определенно не пуста.
Можете ли вы загрузить расширение hexdump для class String и сделать это:
require 'hexdump'
#... whatever you do in your program
puts string.hexdump
и опубликуйте вывод в своем вопросе?
Таким образом, мы можем видеть, что находится в строке, даже если это непечатаемые символы..
Смотрите: