rubyencodingifc

How to decoding IFC using Ruby


In Ruby, I'm reading an .ifc file to get some information, but I can't decode it. For example, the file content:

"'S\X2\00E9\X0\jour/Cuisine'"

should be:

"'Séjour/Cuisine'"

I'm trying to encode it with:

But nothing gives me what I need.


Solution

  • I don't know anything about IFC, but based solely on the page Denis linked to and your example input, this works:

    ESCAPE_SEQUENCE_EXPR = /\\X2\\(.*?)\\X0\\/
    
    def decode_ifc(str)
      str.gsub(ESCAPE_SEQUENCE_EXPR) do
        $1.gsub(/..../) { $&.to_i(16).chr(Encoding::UTF_8) }    
      end
    end
    
    str = 'S\X2\00E9\X0\jour/Cuisine'
    puts "Input:", str
    puts "Output:", decode_ifc(str)
    

    All this code does is replace every sequence of four characters (/..../) between the delimiters, which will each be a Unicode code point in hexadecimal, with the corresponding Unicode character.

    Note that this code handles only this specific encoding. A quick glance at the implementation guide shows other encodings, including an \X4 directive for Unicode characters outside the Basic Multilingual Plane. This ought to get you started, though.

    See it on eval.in: https://eval.in/776980