【问题标题】:How can I remove escape characters from string? UTF issue?如何从字符串中删除转义字符? UTF 问题?
【发布时间】:2014-04-13 14:13:20
【问题描述】:

我读过一个 XML 文件,其中包含诸如

之类的行
 <Song name="Caught Up In You" id='162' duration='276610'/>

我正在阅读文件

f=File.open(file)
f.each_with_index do |line,index|
  if line.match('Song name="')
    @songs << line
    puts line if (index % 1000) == 0
  end
end

但是,当我尝试使用条目时,我发现得到带有转义字符的文本,例如:

"\t\t<Song name=\"Veinte Anos\" id='3118' duration='212009'/>\n"

如何在初始存储或以后的选择中消除转义字符
@songs[rand(@songs.size)]

红宝石 2.0

【问题讨论】:

    标签: ruby xml utf-8 escaping


    【解决方案1】:

    您的文本没有“转义”字符。字符串的.inspect 版本显示了这些。观察:

    > s = gets
    Hello "Michael"
    #=> "Hello \"Michael\"\n" 
    
    > puts s
    Hello "Michael"
    
    > p s  # The same as `puts s.inspect`
    "Hello \"Michael\"\n"
    

    但是,真正的答案是将此 XML 文件作为 XML 处理。例如:

    require 'nokogiri'                                # gem install nokogiri
    doc = Nokogiri.XML( IO.read( 'mysonglist.xml' ) ) # Read and parse the XML file
    songs = doc.css( 'Song' )                         # Gives you a NodeList of song els
    puts songs.map{ |s| s['name'] }                   # Print the name of all songs
    puts songs.map{ |s| s['duration'] }               # Print the durations (as strings)
    
    mins_and_seconds = songs.map{ |s| (s['duration'].to_i/1000.0).divmod(60) }
    #=> [ [ 4, 36.6 ], … ]
    

    【讨论】:

    • 很公平。称它们为“编码”。我怎样才能删除它们?
    • @MichaelDurrant 一个带有双引号的字符串在检查字符串时显示为\",但它只有一个双引号。带有换行符的字符串只有一个换行符(可以用.strip 从末尾删除),但显示为\n。你真的想用你的 iTunes 音乐商店做什么?
    • 只是在玩代码。它实际上是一个包含 5000 首歌曲的样本音乐文件。我不知道这是iTunes格式:)
    • Nokogiri 是一个用于解析和管理 XML 的令人愉快的库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多