2011-02-09 100 views
1

在我的XML文件中,有一些unicode换行符,如下图所示。 使用此链接见截图用BR替换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 
+1

也尝试`/ \ r?\ n /,“
”`。 – Nakilon 2011-02-09 21:08:38

回答

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 

可以更换的与逻辑与的字符列表:

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

thanx男人!你保存了我的头发;)OR'd solutiuon就像一个魅力! – ghostrifle 2011-02-10 05:35:12

0

我有(使用红宝石1.8.7)和I简单地解决这个问题同样的问题:

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