Замена разрыва строки Юникод на BR - PullRequest
1 голос
/ 10 февраля 2011

В моих файлах XML есть разрывы строк в юникоде, как показано на этом скриншоте.Используйте эту ссылку, чтобы увидеть снимок экрана

увеличенный снимок экрана

Две точки после «умов».это разрыв строки.Я гуглил и попробовал почти все, что я знаю, чтобы заменить их на ruby ​​(1.8), но безуспешно.

Вот мой код (с разными попытками unicodes), может быть, кто-то может мне помочь.

def formatedBody
  t = self.body.gsub("\u000a","<br/>")
  t = t.gsub("\u000d","<br/>")
  t = t.gsub("\u0009","<br/>")
  t = t.gsub("\u000c","<br/>")
  t = t.gsub("\u0085","<br/>")
  t = t.gsub("\u2028","<br/>")
  t = t.gsub("\u2029","<br/>")
  t = t.gsub(/0A\0A/u,"<br/>")
  return t
end

Ответы [ 2 ]

4 голосов
/ 10 февраля 2011

Два значения 0x0A являются шестнадцатеричным представлением перевода строки.Обычные переводы строки ASCII, AKA "\n\n" в строке.

Итак, t = t.gsub(/\n/, "<br/>") должно работать.

t = "foo\u000d\u0009\u000c\u0085\u2028\u2029\nbar"
p t

t = t.gsub(/\u000d|\u0009|\u000c|\u0085|\u2028|\u2029|\n/,"<br/>")
puts t

Список символов OR'd можно заменить на:

t = t.gsub(/[\u000d\u0009\u000c\u0085\u2028\u2029\n]/,"<br/>")

В любом случае выходные данные будут выглядеть следующим образом:

"foo\r\t\f\u2028\u2029\nbar"
foo<br/><br/><br/><br/><br/><br/><br/>bar

Причина, по которой ваш

t = t.gsub(/0A\0A/u,"<br/>")

не работает, состоит в том, что регулярное выражение неверно.

t = t.gsub(/\x0A/,"<br/>")

- альтернативный способ определения:

t = t.gsub(/\n/,"<br/>")
0 голосов
/ 21 декабря 2012

У меня была такая же проблема (с использованием ruby ​​1.8.7), и я просто решил ее с помощью:

t = t.gsub(/\xE2\x80(?:\xA8|\xA9)/, '<br/>')
...