1 Reply Latest reply on Feb 17, 2017 10:36 AM by Andrew Waters

    French accents in TPL

    Yanick Girouard

      I'm testing a simple HostToLocation pattern that goes like this:


      tpl 1.12 module Videotron_Pattern_Location;
          origin := "Videotron";
          tree_path := "Videotron", "Pattern", "Extension", "Location";
      end metadata;
      table LocationIdToName 1.0
        "LOC1" -> "Montréal - Place Bonaventure - LAB";
        "LOC2" -> "Montréal - Patate";
        // Arrange that any value that is lookup up for which there isn't an entry
        // is given as the none value.
        default -> none;
      end table;
      pattern HostToLocation 1.0
        This is a template pattern for linking NetworkDevices to Locations based on device name.
        // Required overview section. Some tags must be defined.
          tags Videotron, Pattern, Host, Location;
        end overview;
        // We trigger whenever a Host is created for the first time, or confirmed on
        // a subsequent discovery run.
          on host := Host created, confirmed;
        end triggers;
          // Extract location id from the host name. e.g. to extract the first two 
          // characters, use a regular expression of "^(..)".
          if host.name = 'slbsaportald1' then
              location_id := 'LOC1';
              log.debug("location_id: %location_id%");
          end if;
          // Look up the location name from the table
          location_name := LocationIdToName[location_id];
          log.debug("location_name: %location_name%");
          if not location_name then
            // Unknown location
          end if;
          // Find the Location node(s) for the location
          location := search(Location where name = %location_name%);
          log.debug("location: %location%");
          if not location then
              log.debug("No location found");
            // No node for this location? 
          end if;
          // Relate host to location. Using "uniquerel" rather than "rel" means that
          // any existing Location relationships between this Host (the first 
          // parameter) and any Location nodes other than the one given (the second
          // parameter) are removed. If a host has changed location, this keeps the
          // model up-to-date.
            ElementInLocation := host, 
            Location := location
        end body;
      end pattern;


      I have created the corresponding locations in the Location categories, but when I run the pattern against a group to test it, I get this debug output:


      slbsaportald1 (0): 481ms: location_id: LOC1

      slbsaportald1 (0): 481ms: location_name: Montréal - Place Bonaventure - LAB

      slbsaportald1 (0): 483ms: No location found

      slbsaportald1 (0): 483ms: location: <reasoning.lowlanguage.nodesetproxy.NodeSetProxy object at 0x7f5347071910>


      The pattern has been properly saved in UNIX end of line format and UTF-8 encoding. I have typed the characters manually and they were not pasted from clipboard.


      How can I get this to work? It seems the character encoding/decoding is not done properly.


      If I search for it using a manual query, it works:


      search Location where name = 'Montréal - Place Bonaventure - LAB'