用BR替换unicode换行符

时间:2011-02-09 21:01:22

标签: ruby unicode line-breaks

在我的XML文件中,有如此屏幕截图所示的unicode换行符。 使用此链接查看屏幕截图

bigger screenshot

“思想”之后的两个点。是换行符。我用Google搜索并尝试了几乎所有我知道用红宝石(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 个答案:

答案 0 :(得分:4)

两个0x0A值是换行符的十六进制表示形式。常规ol'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/>")

答案 1 :(得分:0)

我有同样的问题(使用ruby 1.8.7),我只需用以下方法解决:

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