Merge pull request #148 from googlei18n/opensource_update_28853

(AUTOMATIC) opensource update
diff --git a/cpp/include/libaddressinput/localization.h b/cpp/include/libaddressinput/localization.h
index 85b1b76..0fa5244 100644
--- a/cpp/include/libaddressinput/localization.h
+++ b/cpp/include/libaddressinput/localization.h
@@ -79,7 +79,6 @@
   // service URL. The problem should only be one of MISSING_REQUIRED_FIELD,
   // INVALID_FORMAT, or MISMATCHING_VALUE.
   std::string GetErrorMessageForPostalCode(
-      const AddressData& address,
       AddressProblem problem,
       bool uses_postal_code_as_label,
       const std::string& postal_code_example,
diff --git a/cpp/include/libaddressinput/null_storage.h b/cpp/include/libaddressinput/null_storage.h
index feb6d5b..9e36c9d 100644
--- a/cpp/include/libaddressinput/null_storage.h
+++ b/cpp/include/libaddressinput/null_storage.h
@@ -32,13 +32,13 @@
   NullStorage& operator=(const NullStorage&) = delete;
 
   NullStorage();
-  virtual ~NullStorage();
+  ~NullStorage() override;
 
   // No-op.
-  virtual void Put(const std::string& key, std::string* data);
+  void Put(const std::string& key, std::string* data) override;
 
   // Always calls the |data_ready| callback function signalling failure.
-  virtual void Get(const std::string& key, const Callback& data_ready) const;
+  void Get(const std::string& key, const Callback& data_ready) const override;
 };
 
 }  // namespace addressinput
diff --git a/cpp/include/libaddressinput/ondemand_supplier.h b/cpp/include/libaddressinput/ondemand_supplier.h
index 763058a..37c2401 100644
--- a/cpp/include/libaddressinput/ondemand_supplier.h
+++ b/cpp/include/libaddressinput/ondemand_supplier.h
@@ -50,10 +50,13 @@
 
   // Takes ownership of |source| and |storage|.
   OndemandSupplier(const Source* source, Storage* storage);
-  virtual ~OndemandSupplier();
+  ~OndemandSupplier() override;
 
   // Loads the metadata needed for |lookup_key|, then calls |supplied|.
-  virtual void Supply(const LookupKey& lookup_key, const Callback& supplied);
+  void Supply(const LookupKey& lookup_key, const Callback& supplied) override;
+  // For now, this is identical to Supply.
+  void SupplyGlobally(const LookupKey& lookup_key,
+                      const Callback& supplied) override;
 
  private:
   const std::unique_ptr<const Retriever> retriever_;
diff --git a/cpp/include/libaddressinput/preload_supplier.h b/cpp/include/libaddressinput/preload_supplier.h
index e538b6f..50309ae 100644
--- a/cpp/include/libaddressinput/preload_supplier.h
+++ b/cpp/include/libaddressinput/preload_supplier.h
@@ -56,13 +56,19 @@
 
   // Takes ownership of |source| and |storage|.
   PreloadSupplier(const Source* source, Storage* storage);
-  virtual ~PreloadSupplier();
+  ~PreloadSupplier() override;
 
   // Collects the metadata needed for |lookup_key| from the cache, then calls
   // |supplied|. If the metadata needed isn't found in the cache, it will call
   // the callback with status false.
-  virtual void Supply(const LookupKey& lookup_key,
-                      const Supplier::Callback& supplied);
+  void Supply(const LookupKey& lookup_key,
+              const Supplier::Callback& supplied) override;
+
+  // Collects the metadata needed for |lookup_key| from the cache, by looking at
+  // all available languages, then calls |supplied|. If the metadata needed
+  // isn't found in the cache, it will call the callback with status false.
+  void SupplyGlobally(const LookupKey& lookup_key,
+                      const Supplier::Callback& supplied) override;
 
   // Should be called only when IsLoaded() returns true for the region code of
   // the |lookup_key|. Can return nullptr if the |lookup_key| does not
@@ -85,14 +91,15 @@
   bool IsPending(const std::string& region_code) const;
 
  private:
-  bool GetRuleHierarchy(const LookupKey& lookup_key,
-                        RuleHierarchy* hierarchy) const;
+  bool GetRuleHierarchy(const LookupKey& lookup_key, RuleHierarchy* hierarchy,
+                        const bool search_globally) const;
   bool IsLoadedKey(const std::string& key) const;
   bool IsPendingKey(const std::string& key) const;
 
   const std::unique_ptr<const Retriever> retriever_;
   std::set<std::string> pending_;
   const std::unique_ptr<IndexMap> rule_index_;
+  const std::unique_ptr<IndexMap> language_rule_index_;
   std::vector<const Rule*> rule_storage_;
   std::map<std::string, std::map<std::string, const Rule*> > region_rules_;
 };
diff --git a/cpp/include/libaddressinput/supplier.h b/cpp/include/libaddressinput/supplier.h
index 7d079cf..b7d1da2 100644
--- a/cpp/include/libaddressinput/supplier.h
+++ b/cpp/include/libaddressinput/supplier.h
@@ -40,6 +40,13 @@
   virtual void Supply(const LookupKey& lookup_key,
                       const Callback& supplied) = 0;
 
+  // Aggregates the metadata (in all available languages) needed for
+  // |lookup_key| into a RuleHierarchy object, then calls |supplied|.
+  // Implementations of this interface may either load the necessary data on
+  // demand, or fail if the necessary data hasn't already been loaded.
+  virtual void SupplyGlobally(const LookupKey& lookup_key,
+                              const Callback& supplied) = 0;
+
   // A RuleHierarchy object encapsulates the hierarchical list of Rule objects
   // that corresponds to a particular LookupKey.
   struct RuleHierarchy {
diff --git a/cpp/include/libaddressinput/util/template_util.h b/cpp/include/libaddressinput/util/template_util.h
deleted file mode 100644
index 35125e1..0000000
--- a/cpp/include/libaddressinput/util/template_util.h
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-//
-// The original source code is from:
-// https://code.google.com/p/libphonenumber/source/browse/trunk/cpp/src/phonenumbers/base/template_util.h?r=621
-
-#ifndef I18N_ADDRESSINPUT_UTIL_TEMPLATE_UTIL_H_
-#define I18N_ADDRESSINPUT_UTIL_TEMPLATE_UTIL_H_
-
-#include <cstddef>  // For size_t.
-
-namespace i18n {
-namespace addressinput {
-
-// template definitions from tr1
-
-template<class T, T v>
-struct integral_constant {
-  static const T value = v;
-  typedef T value_type;
-  typedef integral_constant<T, v> type;
-};
-
-template <class T, T v> const T integral_constant<T, v>::value;
-
-typedef integral_constant<bool, true> true_type;
-typedef integral_constant<bool, false> false_type;
-
-template <class T> struct is_pointer : false_type {};
-template <class T> struct is_pointer<T*> : true_type {};
-
-template <class T, class U> struct is_same : public false_type {};
-template <class T> struct is_same<T,T> : true_type {};
-
-template<class> struct is_array : public false_type {};
-template<class T, size_t n> struct is_array<T[n]> : public true_type {};
-template<class T> struct is_array<T[]> : public true_type {};
-
-template <class T> struct is_non_const_reference : false_type {};
-template <class T> struct is_non_const_reference<T&> : true_type {};
-template <class T> struct is_non_const_reference<const T&> : false_type {};
-
-template <class T> struct is_void : false_type {};
-template <> struct is_void<void> : true_type {};
-
-namespace internal {
-
-// Types YesType and NoType are guaranteed such that sizeof(YesType) <
-// sizeof(NoType).
-typedef char YesType;
-
-struct NoType {
-  YesType dummy[2];
-};
-
-// This class is an implementation detail for is_convertible, and you
-// don't need to know how it works to use is_convertible. For those
-// who care: we declare two different functions, one whose argument is
-// of type To and one with a variadic argument list. We give them
-// return types of different size, so we can use sizeof to trick the
-// compiler into telling us which function it would have chosen if we
-// had called it with an argument of type From.  See Alexandrescu's
-// _Modern C++ Design_ for more details on this sort of trick.
-
-struct ConvertHelper {
-  template <typename To>
-  static YesType Test(To);
-
-  template <typename To>
-  static NoType Test(...);
-
-  template <typename From>
-  static From& Create();
-};
-
-// Used to determine if a type is a struct/union/class. Inspired by Boost's
-// is_class type_trait implementation.
-struct IsClassHelper {
-  template <typename C>
-  static YesType Test(void(C::*)(void));
-
-  template <typename C>
-  static NoType Test(...);
-};
-
-}  // namespace internal
-
-// Inherits from true_type if From is convertible to To, false_type otherwise.
-//
-// Note that if the type is convertible, this will be a true_type REGARDLESS
-// of whether or not the conversion would emit a warning.
-template <typename From, typename To>
-struct is_convertible
-    : integral_constant<bool,
-                        sizeof(internal::ConvertHelper::Test<To>(
-                                   internal::ConvertHelper::Create<From>())) ==
-                        sizeof(internal::YesType)> {
-};
-
-template <typename T>
-struct is_class
-    : integral_constant<bool,
-                        sizeof(internal::IsClassHelper::Test<T>(0)) ==
-                            sizeof(internal::YesType)> {
-};
-
-}  // namespace addressinput
-}  // namespace i18n
-
-#endif  // I18N_ADDRESSINPUT_UTIL_TEMPLATE_UTIL_H_
diff --git a/cpp/src/address_data.cc b/cpp/src/address_data.cc
index fb5a2a5..80f4d56 100644
--- a/cpp/src/address_data.cc
+++ b/cpp/src/address_data.cc
@@ -65,7 +65,7 @@
 // A string is considered to be "empty" not only if it actually is empty, but
 // also if it contains nothing but whitespace.
 bool IsStringEmpty(const std::string& str) {
-  static const RE2 kMatcher("\\S");
+  static const RE2 kMatcher(R"(\S)");
   return str.empty() || !RE2::PartialMatch(str, kMatcher);
 }
 
diff --git a/cpp/src/address_formatter.cc b/cpp/src/address_formatter.cc
index 0b613ff..a1f673f 100644
--- a/cpp/src/address_formatter.cc
+++ b/cpp/src/address_formatter.cc
@@ -38,7 +38,7 @@
 
 const char kCommaSeparator[] = ", ";
 const char kSpaceSeparator[] = " ";
-const char kArabicCommaSeparator[] = "\xD8\x8C" " ";  /* "، " */
+const char kArabicCommaSeparator[] = u8"، ";
 
 const char* kLanguagesThatUseSpace[] = {
   "th",
diff --git a/cpp/src/localization.cc b/cpp/src/localization.cc
index baff247..c2a5a41 100644
--- a/cpp/src/localization.cc
+++ b/cpp/src/localization.cc
@@ -91,8 +91,7 @@
     bool uses_postal_code_as_label =
         rule.GetPostalCodeNameMessageId() ==
         IDS_LIBADDRESSINPUT_POSTAL_CODE_LABEL;
-    return GetErrorMessageForPostalCode(address, problem,
-                                        uses_postal_code_as_label,
+    return GetErrorMessageForPostalCode(problem, uses_postal_code_as_label,
                                         postal_code_example, post_service_url);
   } else {
     if (problem == MISSING_REQUIRED_FIELD) {
@@ -125,7 +124,6 @@
 }
 
 std::string Localization::GetErrorMessageForPostalCode(
-    const AddressData& address,
     AddressProblem problem,
     bool uses_postal_code_as_label,
     const std::string& postal_code_example,
@@ -142,7 +140,7 @@
     } else if (!postal_code_example.empty()) {
       message_id = uses_postal_code_as_label ?
           IDS_LIBADDRESSINPUT_MISSING_REQUIRED_POSTAL_CODE_EXAMPLE :
-          IDS_LIBADDRESSINPUT_MISSING_REQUIRED_ZIP_CODE_EXAMPLE ;
+          IDS_LIBADDRESSINPUT_MISSING_REQUIRED_ZIP_CODE_EXAMPLE;
       parameters.push_back(postal_code_example);
     } else {
       message_id = IDS_LIBADDRESSINPUT_MISSING_REQUIRED_FIELD;
diff --git a/cpp/src/ondemand_supplier.cc b/cpp/src/ondemand_supplier.cc
index fa3f88e..b6de593 100644
--- a/cpp/src/ondemand_supplier.cc
+++ b/cpp/src/ondemand_supplier.cc
@@ -39,6 +39,11 @@
   }
 }
 
+void OndemandSupplier::SupplyGlobally(const LookupKey& lookup_key,
+                                      const Callback& supplied) {
+  Supply(lookup_key, supplied);
+}
+
 void OndemandSupplier::Supply(const LookupKey& lookup_key,
                               const Callback& supplied) {
   OndemandSupplyTask* task =
diff --git a/cpp/src/post_box_matchers.cc b/cpp/src/post_box_matchers.cc
index f1ad6dd..fcb230a 100644
--- a/cpp/src/post_box_matchers.cc
+++ b/cpp/src/post_box_matchers.cc
@@ -36,56 +36,26 @@
     const char* const language;
     const RE2ptr ptr;
   } kMatchers[] = {
-    { "ar",
-      /* "صندوق بريد|ص[-. ]ب" */
-      new RE2("\xD8\xB5\xD9\x86\xD8\xAF\xD9\x88\xD9\x82 "
-              "\xD8\xA8\xD8\xB1\xD9\x8A\xD8\xAF|\xD8\xB5[-. ]\xD8\xA8") },
-
-    { "cs", new RE2("(?i)p\\.? ?p\\.? \\d") },
-    { "da", new RE2("(?i)Postboks") },
-    { "de", new RE2("(?i)Postfach") },
-
-    { "el",
-      /* "T\\.? ?Θ\\.? \\d{2}" */
-      new RE2("(?i)T\\.? ?\xCE\x98\\.? \\d{2}") },
-
-    { "en", new RE2("Private Bag|Post(?:al)? Box") },
-    { "es", new RE2("(?i)(?:Apartado|Casillas) de correos?") },
-    { "fi", new RE2("(?i)Postilokero|P\\.?L\\.? \\d") },
-    { "hr", new RE2("(?i)p\\.? ?p\\.? \\d") },
-
-    { "hu",
-      /* "Postafi(?:[oó]|ó)k|Pf\\.? \\d" */
-      new RE2("(?i)Postafi(?:[o\xC3\xB3]|o\xCC\x81)k|Pf\\.? \\d") },
-
-    { "fr",
-      /* "Bo(?:[iî]|î)te Postale|BP \\d|CEDEX \\d" */
-      new RE2("(?i)Bo(?:[i\xC3\xAE]|i\xCC\x82)te Postale|BP \\d|CEDEX \\d") },
-
-    { "ja",
-      /* "私書箱\\d{1,5}号" */
-      new RE2("(?i)\xE7\xA7\x81\xE6\x9B\xB8\xE7\xAE\xB1\\d{1,5}\xE5\x8F\xB7") },
-
-    { "nl", new RE2("(?i)Postbus") },
-    { "no", new RE2("(?i)Postboks") },
-    { "pl", new RE2("(?i)Skr(?:\\.?|ytka) poczt(?:\\.?|owa)") },
-    { "pt", new RE2("(?i)Apartado") },
-
-    { "ru",
-      /* "абонентский ящик|[аa]\\\" */
-      new RE2("(?i)\xD0\xB0\xD0\xB1\xD0\xBE\xD0\xBD\xD0\xB5\xD0\xBD\xD1\x82\xD1"
-              "\x81\xD0\xBA\xD0\xB8\xD0\xB9 \xD1\x8F\xD1\x89\xD0\xB8\xD0\xBA|"
-              "[\xD0\xB0""a]\\\"\xD1\x8F (?:(?:\xE2\x84\x96|#|N) ?)?\\d") },
-
-    { "sv", new RE2("(?i)Box \\d") },
-
-    { "zh",
-      /* "郵政信箱.{1,5}號|郵局第.{1,10}號信箱" */
-      new RE2("(?i)\xE9\x83\xB5\xE6\x94\xBF\xE4\xBF\xA1\xE7\xAE\xB1.{1,5}"
-              "\xE8\x99\x9F|\xE9\x83\xB5\xE5\xB1\x80\xE7\xAC\xAC.{1,10}"
-              "\xE8\x99\x9F\xE4\xBF\xA1\xE7\xAE\xB1") },
-
-    { "und", new RE2("P\\.? ?O\\.? Box") }
+      {"ar", new RE2(u8R"(صندوق بريد|ص[-. ]ب)")},
+      {"cs", new RE2(u8R"((?i)p\.? ?p\.? \d)")},
+      {"da", new RE2(u8R"((?i)Postboks)")},
+      {"de", new RE2(u8R"((?i)Postfach)")},
+      {"el", new RE2(u8R"((?i)T\.? ?Θ\.? \d{2})")},
+      {"en", new RE2(u8R"(Private Bag|Post(?:al)? Box)")},
+      {"es", new RE2(u8R"((?i)(?:Apartado|Casillas) de correos?)")},
+      {"fi", new RE2(u8R"((?i)Postilokero|P\.?L\.? \d)")},
+      {"hr", new RE2(u8R"((?i)p\.? ?p\.? \d)")},
+      {"hu", new RE2(u8R"((?i)Postafi(?:[oó]|ó)k|Pf\.? \d)")},
+      {"fr", new RE2(u8R"((?i)Bo(?:[iî]|î)te Postale|BP \d|CEDEX \d)")},
+      {"ja", new RE2(u8R"(私書箱\d{1,5}号)")},
+      {"nl", new RE2(u8R"((?i)Postbus)")},
+      {"no", new RE2(u8R"((?i)Postboks)")},
+      {"pl", new RE2(u8R"((?i)Skr(?:\.?|ytka) poczt(?:\.?|owa))")},
+      {"pt", new RE2(u8R"((?i)Apartado)")},
+      {"ru", new RE2(u8R"((?i)абонентский ящик|[аa]"я (?:(?:№|#|N) ?)?\d)")},
+      {"sv", new RE2(u8R"((?i)Box \d)")},
+      {"zh", new RE2(u8R"(郵政信箱.{1,5}號|郵局第.{1,10}號信箱)")},
+      {"und", new RE2(u8R"(P\.? ?O\.? Box)")},
   };
 
   std::map<std::string, const RE2ptr*> matchers;
diff --git a/cpp/src/preload_supplier.cc b/cpp/src/preload_supplier.cc
index a0f3710..da943b0 100644
--- a/cpp/src/preload_supplier.cc
+++ b/cpp/src/preload_supplier.cc
@@ -75,12 +75,14 @@
          const Retriever& retriever,
          std::set<std::string>* pending,
          IndexMap* rule_index,
+         IndexMap* language_rule_index,
          std::vector<const Rule*>* rule_storage,
          std::map<std::string, const Rule*>* region_rules)
       : region_code_(region_code),
         loaded_(loaded),
         pending_(pending),
         rule_index_(rule_index),
+        language_rule_index_(language_rule_index),
         rule_storage_(rule_storage),
         region_rules_(region_rules),
         retrieved_(BuildCallback(this, &Helper::OnRetrieved)) {
@@ -111,6 +113,7 @@
 
     IndexMap::iterator last_index_it = rule_index_->end();
     IndexMap::iterator last_latin_it = rule_index_->end();
+    IndexMap::iterator language_index_it = language_rule_index_->end();
     std::map<std::string, const Rule*>::iterator last_region_it =
         region_rules_->end();
 
@@ -168,19 +171,19 @@
       ++rule_count;
     }
 
-    /*
-     * Normally the address metadata server takes care of mapping from natural
-     * language names to metadata IDs (eg. "São Paulo" -> "SP") and from Latin
-     * script names to local script names (eg. "Tokushima" -> "徳島県").
-     *
-     * As the PreloadSupplier doesn't contact the metadata server upon each
-     * Supply() request, it instead has an internal lookup table (rule_index_)
-     * that contains such mappings.
-     *
-     * This lookup table is populated by iterating over all sub rules and for
-     * each of them construct ID strings using human readable names (eg. "São
-     * Paulo") and using Latin script names (eg. "Tokushima").
-     */
+    //
+    // Normally the address metadata server takes care of mapping from natural
+    // language names to metadata IDs (eg. "São Paulo" -> "SP") and from Latin
+    // script names to local script names (eg. "Tokushima" -> "徳島県").
+    //
+    // As the PreloadSupplier doesn't contact the metadata server upon each
+    // Supply() request, it instead has an internal lookup table (rule_index_)
+    // that contains such mappings.
+    //
+    // This lookup table is populated by iterating over all sub rules and for
+    // each of them construct ID strings using human readable names (eg. "São
+    // Paulo") and using Latin script names (eg. "Tokushima").
+    //
     for (std::vector<const Rule*>::const_iterator
          it = sub_rules.begin(); it != sub_rules.end(); ++it) {
       std::stack<const Rule*> hierarchy;
@@ -232,6 +235,8 @@
         const std::string& id = (*it)->GetId();
         std::string::size_type pos = id.rfind("--");
         if (pos != std::string::npos) {
+          language_index_it = language_rule_index_->insert(
+              language_index_it, std::make_pair(human_id, *it));
           human_id.append(id, pos, id.size() - pos);
         }
       }
@@ -257,6 +262,7 @@
   const PreloadSupplier::Callback& loaded_;
   std::set<std::string>* const pending_;
   IndexMap* const rule_index_;
+  IndexMap* const language_rule_index_;
   std::vector<const Rule*>* const rule_storage_;
   std::map<std::string, const Rule*>* const region_rules_;
   const std::unique_ptr<const Retriever::Callback> retrieved_;
@@ -276,6 +282,7 @@
     : retriever_(new Retriever(source, storage)),
       pending_(),
       rule_index_(new IndexMap),
+      language_rule_index_(new IndexMap),
       rule_storage_(),
       region_rules_() {}
 
@@ -289,14 +296,21 @@
 void PreloadSupplier::Supply(const LookupKey& lookup_key,
                              const Supplier::Callback& supplied) {
   Supplier::RuleHierarchy hierarchy;
-  bool success = GetRuleHierarchy(lookup_key, &hierarchy);
+  bool success = GetRuleHierarchy(lookup_key, &hierarchy, false);
+  supplied(success, lookup_key, hierarchy);
+}
+
+void PreloadSupplier::SupplyGlobally(const LookupKey& lookup_key,
+                                     const Supplier::Callback& supplied) {
+  Supplier::RuleHierarchy hierarchy;
+  bool success = GetRuleHierarchy(lookup_key, &hierarchy, true);
   supplied(success, lookup_key, hierarchy);
 }
 
 const Rule* PreloadSupplier::GetRule(const LookupKey& lookup_key) const {
   assert(IsLoaded(lookup_key.GetRegionCode()));
   Supplier::RuleHierarchy hierarchy;
-  if (!GetRuleHierarchy(lookup_key, &hierarchy)) {
+  if (!GetRuleHierarchy(lookup_key, &hierarchy, false)) {
     return nullptr;
   }
   return hierarchy.rule[lookup_key.GetDepth()];
@@ -322,6 +336,7 @@
       *retriever_,
       &pending_,
       rule_index_.get(),
+      language_rule_index_.get(),
       &rule_storage_,
       &region_rules_[region_code]);
 }
@@ -341,7 +356,8 @@
 }
 
 bool PreloadSupplier::GetRuleHierarchy(const LookupKey& lookup_key,
-                                       RuleHierarchy* hierarchy) const {
+                                       RuleHierarchy* hierarchy,
+                                       const bool search_globally) const {
   assert(hierarchy != nullptr);
 
   if (RegionDataConstants::IsSupported(lookup_key.GetRegionCode())) {
@@ -352,7 +368,11 @@
     for (size_t depth = 0; depth <= max_depth; ++depth) {
       const std::string& key = lookup_key.ToKeyString(depth);
       IndexMap::const_iterator it = rule_index_->find(key);
-      if (it == rule_index_->end()) {
+      if (it == rule_index_->end() && search_globally && depth > 0 &&
+          !hierarchy->rule[0]->GetLanguages().empty()) {
+        it = language_rule_index_->find(key);
+      }
+      if (it == rule_index_->end() || it == language_rule_index_->end()) {
         return depth > 0;  // No data on COUNTRY level is failure.
       }
       hierarchy->rule[depth] = it->second;
diff --git a/cpp/src/region_data_constants.cc b/cpp/src/region_data_constants.cc
index 0b45308..9ee5334 100644
--- a/cpp/src/region_data_constants.cc
+++ b/cpp/src/region_data_constants.cc
@@ -38,1380 +38,1380 @@
 std::map<std::string, std::string> InitRegionData() {
   std::map<std::string, std::string> region_data;
   region_data.insert(std::make_pair("AC", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"ASCN 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"ASCN 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("AD", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"AD100,AD501,AD700\","
-      "\"posturl\":\"http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp\?Provincia=\","
-      "\"languages\":\"ca\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"AD100,AD501,AD700",)"
+      u8R"("posturl":"http://www.correos.es/comun/CodigosPostales/1010_s-CodPostal.asp?Provincia=",)"
+      u8R"("languages":"ca")"
       "}"));
   region_data.insert(std::make_pair("AE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%S\","
-      "\"lfmt\":\"%N%n%O%n%A%n%S\","
-      "\"require\":\"AS\","
-      "\"state_name_type\":\"emirate\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%S",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%S",)"
+      u8R"("require":"AS",)"
+      u8R"("state_name_type":"emirate",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("AF", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"1001,2601,3801\","
-      "\"languages\":\"fa~ps~uz-Arab~tk~bal\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"1001,2601,3801",)"
+      u8R"("languages":"fa~ps~uz-Arab~tk~bal")"
       "}"));
   region_data.insert(std::make_pair("AG", "{"
-      "\"require\":\"A\","
-      "\"languages\":\"en\""
+      u8R"("require":"A",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("AI", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"2640\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"2640",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("AL", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C\","
-      "\"zipex\":\"1001,1017,3501\","
-      "\"languages\":\"sq\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
+      u8R"("zipex":"1001,1017,3501",)"
+      u8R"("languages":"sq")"
       "}"));
   region_data.insert(std::make_pair("AM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C%n%S\","
-      "\"lfmt\":\"%N%n%O%n%A%n%Z%n%C%n%S\","
-      "\"zipex\":\"375010,0002,0010\","
-      "\"languages\":\"hy\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C%n%S",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%Z%n%C%n%S",)"
+      u8R"("zipex":"375010,0002,0010",)"
+      u8R"("languages":"hy")"
       "}"));
   region_data.insert(std::make_pair("AO", "{"
-      "\"languages\":\"pt\""
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("AQ", "{"
       "}"));
   region_data.insert(std::make_pair("AR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\","
-      "\"zipex\":\"C1070AAM,C1000WAM,B1000TBU,X5187XAB\","
-      "\"posturl\":\"http://www.correoargentino.com.ar/formularios/cpa\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
+      u8R"("zipex":"C1070AAM,C1000WAM,B1000TBU,X5187XAB",)"
+      u8R"("posturl":"http://www.correoargentino.com.ar/formularios/cpa",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("AS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96799\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"sm~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96799",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"sm~en")"
       "}"));
   region_data.insert(std::make_pair("AT", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"1010,3741\","
-      "\"posturl\":\"http://www.post.at/post_subsite_postleitzahlfinder.php\","
-      "\"languages\":\"de~hr~sl~hu\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"1010,3741",)"
+      u8R"("posturl":"http://www.post.at/post_subsite_postleitzahlfinder.php",)"
+      u8R"("languages":"de~hr~sl~hu")"
       "}"));
   region_data.insert(std::make_pair("AU", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"state\","
-      "\"locality_name_type\":\"suburb\","
-      "\"zipex\":\"2060,3171,6430,4000,4006,3001\","
-      "\"posturl\":\"http://www1.auspost.com.au/postcodes/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("locality_name_type":"suburb",)"
+      u8R"("zipex":"2060,3171,6430,4000,4006,3001",)"
+      u8R"("posturl":"http://www1.auspost.com.au/postcodes/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("AW", "{"
-      "\"languages\":\"nl~pap\""
+      u8R"("languages":"nl~pap")"
       "}"));
   region_data.insert(std::make_pair("AX", "{"
-      "\"fmt\":\"%O%n%N%n%A%nAX-%Z %C%n\\u00c5LAND\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"22150,22550,22240,22710,22270,22730,22430\","
-      "\"posturl\":\"http://www.posten.ax/department.con\?iPage=123\","
-      "\"languages\":\"sv\""
+      u8R"("fmt":"%O%n%N%n%A%nAX-%Z %C%nÅLAND",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"22150,22550,22240,22710,22270,22730,22430",)"
+      u8R"("posturl":"http://www.posten.ax/department.con?iPage=123",)"
+      u8R"("languages":"sv")"
       "}"));
   region_data.insert(std::make_pair("AZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%nAZ %Z %C\","
-      "\"zipex\":\"1000\","
-      "\"languages\":\"az~az-Cyrl\""
+      u8R"("fmt":"%N%n%O%n%A%nAZ %Z %C",)"
+      u8R"("zipex":"1000",)"
+      u8R"("languages":"az~az-Cyrl")"
       "}"));
   region_data.insert(std::make_pair("BA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"71000\","
-      "\"languages\":\"bs~bs-Cyrl~hr~sr~sr-Latn\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"71000",)"
+      u8R"("languages":"bs~bs-Cyrl~hr~sr~sr-Latn")"
       "}"));
   region_data.insert(std::make_pair("BB", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\","
-      "\"state_name_type\":\"parish\","
-      "\"zipex\":\"BB23026,BB22025\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
+      u8R"("state_name_type":"parish",)"
+      u8R"("zipex":"BB23026,BB22025",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("BD", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C - %Z\","
-      "\"zipex\":\"1340,1000\","
-      "\"posturl\":\"http://www.bangladeshpost.gov.bd/PostCode.asp\","
-      "\"languages\":\"bn\""
+      u8R"("fmt":"%N%n%O%n%A%n%C - %Z",)"
+      u8R"("zipex":"1340,1000",)"
+      u8R"("posturl":"http://www.bangladeshpost.gov.bd/PostCode.asp",)"
+      u8R"("languages":"bn")"
       "}"));
   region_data.insert(std::make_pair("BE", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"4000,1000\","
-      "\"posturl\":\"http://www.post.be/site/nl/residential/customerservice/search/postal_codes.html\","
-      "\"languages\":\"nl~fr~de\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"4000,1000",)"
+      u8R"("posturl":"http://www.post.be/site/nl/residential/customerservice/search/postal_codes.html",)"
+      u8R"("languages":"nl~fr~de")"
       "}"));
   region_data.insert(std::make_pair("BF", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %X\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %X",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("BG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1000,1700\","
-      "\"posturl\":\"http://www.bgpost.bg/\?cid=5\","
-      "\"languages\":\"bg\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1000,1700",)"
+      u8R"("posturl":"http://www.bgpost.bg/?cid=5",)"
+      u8R"("languages":"bg")"
       "}"));
   region_data.insert(std::make_pair("BH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"317\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"317",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("BI", "{"
-      "\"languages\":\"rn~fr~en\""
+      u8R"("languages":"rn~fr~en")"
       "}"));
   region_data.insert(std::make_pair("BJ", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("BL", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97100\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97100",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("BM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"FL 07,HM GX,HM 12\","
-      "\"posturl\":\"http://www.landvaluation.bm/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"FL 07,HM GX,HM 12",)"
+      u8R"("posturl":"http://www.landvaluation.bm/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("BN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"BT2328,KA1131,BA1511\","
-      "\"posturl\":\"http://www.post.gov.bn/SitePages/postcodes.aspx\","
-      "\"languages\":\"ms~ms-Arab\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"BT2328,KA1131,BA1511",)"
+      u8R"("posturl":"http://www.post.gov.bn/SitePages/postcodes.aspx",)"
+      u8R"("languages":"ms~ms-Arab")"
       "}"));
   region_data.insert(std::make_pair("BO", "{"
-      "\"languages\":\"es~qu~ay\""
+      u8R"("languages":"es~qu~ay")"
       "}"));
   region_data.insert(std::make_pair("BQ", "{"
-      "\"languages\":\"nl\""
+      u8R"("languages":"nl")"
       "}"));
   region_data.insert(std::make_pair("BR", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%D%n%C-%S%n%Z\","
-      "\"require\":\"ASCZ\","
-      "\"state_name_type\":\"state\","
-      "\"sublocality_name_type\":\"neighborhood\","
-      "\"zipex\":\"40301-110,70002-900\","
-      "\"posturl\":\"http://www.buscacep.correios.com.br/\","
-      "\"languages\":\"pt\""
+      u8R"("fmt":"%O%n%N%n%A%n%D%n%C-%S%n%Z",)"
+      u8R"("require":"ASCZ",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("sublocality_name_type":"neighborhood",)"
+      u8R"("zipex":"40301-110,70002-900",)"
+      u8R"("posturl":"http://www.buscacep.correios.com.br/",)"
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("BS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S\","
-      "\"state_name_type\":\"island\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("BT", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"11001,31101,35003\","
-      "\"posturl\":\"http://www.bhutanpost.bt/searchpostcode.php\","
-      "\"languages\":\"dz\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"11001,31101,35003",)"
+      u8R"("posturl":"http://www.bhutanpost.bt/searchpostcode.php",)"
+      u8R"("languages":"dz")"
       "}"));
   region_data.insert(std::make_pair("BV", "{"
       "}"));
   region_data.insert(std::make_pair("BW", "{"
-      "\"languages\":\"en~tn\""
+      u8R"("languages":"en~tn")"
       "}"));
   region_data.insert(std::make_pair("BY", "{"
-      "\"fmt\":\"%S%n%Z %C%n%A%n%O%n%N\","
-      "\"zipex\":\"223016,225860,220050\","
-      "\"posturl\":\"http://ex.belpost.by/addressbook/\","
-      "\"languages\":\"be~ru\""
+      u8R"("fmt":"%S%n%Z %C%n%A%n%O%n%N",)"
+      u8R"("zipex":"223016,225860,220050",)"
+      u8R"("posturl":"http://ex.belpost.by/addressbook/",)"
+      u8R"("languages":"be~ru")"
       "}"));
   region_data.insert(std::make_pair("BZ", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("CA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zipex\":\"H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1\","
-      "\"posturl\":\"https://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf\","
-      "\"languages\":\"en~fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zipex":"H3Z 2Y7,V8X 3X4,T0L 1K0,T0H 1A0,K1A 0B1",)"
+      u8R"("posturl":"https://www.canadapost.ca/cpo/mc/personal/postalcode/fpc.jsf",)"
+      u8R"("languages":"en~fr")"
       "}"));
   region_data.insert(std::make_pair("CC", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C %S %Z\","
-      "\"zipex\":\"6799\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
+      u8R"("zipex":"6799",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("CD", "{"
-      "\"languages\":\"sw~lua~fr~ln~kg\""
+      u8R"("languages":"sw~lua~fr~ln~kg")"
       "}"));
   region_data.insert(std::make_pair("CF", "{"
-      "\"languages\":\"fr~sg\""
+      u8R"("languages":"fr~sg")"
       "}"));
   region_data.insert(std::make_pair("CG", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("CH", "{"
-      "\"fmt\":\"%O%n%N%n%A%nCH-%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"2544,1211,1556,3030\","
-      "\"posturl\":\"http://www.post.ch/db/owa/pv_plz_pack/pr_main\","
-      "\"languages\":\"de~gsw~fr~it~rm\""
+      u8R"("fmt":"%O%n%N%n%A%nCH-%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"2544,1211,1556,3030",)"
+      u8R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)"
+      u8R"("languages":"de~gsw~fr~it~rm")"
       "}"));
   region_data.insert(std::make_pair("CI", "{"
-      "\"fmt\":\"%N%n%O%n%X %A %C %X\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%N%n%O%n%X %A %C %X",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("CK", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("CL", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\","
-      "\"zipex\":\"8340457,8720019,1230000,8329100\","
-      "\"posturl\":\"http://www.correos.cl/SitePages/home.aspx\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
+      u8R"("zipex":"8340457,8720019,1230000,8329100",)"
+      u8R"("posturl":"http://www.correos.cl/SitePages/home.aspx",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("CM", "{"
-      "\"languages\":\"fr~en\""
+      u8R"("languages":"fr~en")"
       "}"));
   region_data.insert(std::make_pair("CN", "{"
-      "\"fmt\":\"%Z%n%S%C%D%n%A%n%O%n%N\","
-      "\"lfmt\":\"%N%n%O%n%A%n%D%n%C%n%S, %Z\","
-      "\"require\":\"ACSZ\","
-      "\"sublocality_name_type\":\"district\","
-      "\"zipex\":\"266033,317204,100096,100808\","
-      "\"posturl\":\"http://www.ems.com.cn/serviceguide/you_bian_cha_xun.html\","
-      "\"languages\":\"zh\""
+      u8R"("fmt":"%Z%n%S%C%D%n%A%n%O%n%N",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S, %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("sublocality_name_type":"district",)"
+      u8R"("zipex":"266033,317204,100096,100808",)"
+      u8R"("posturl":"http://www.ems.com.cn/serviceguide/you_bian_cha_xun.html",)"
+      u8R"("languages":"zh")"
       "}"));
   region_data.insert(std::make_pair("CO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S, %Z\","
-      "\"require\":\"AS\","
-      "\"state_name_type\":\"department\","
-      "\"zipex\":\"111221,130001,760011\","
-      "\"posturl\":\"http://www.codigopostal.gov.co/\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S, %Z",)"
+      u8R"("require":"AS",)"
+      u8R"("state_name_type":"department",)"
+      u8R"("zipex":"111221,130001,760011",)"
+      u8R"("posturl":"http://www.codigopostal.gov.co/",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("CR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%S, %C%n%Z\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"1000,2010,1001\","
-      "\"posturl\":\"https://www.correos.go.cr/nosotros/codigopostal/busqueda.html\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%S, %C%n%Z",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"1000,2010,1001",)"
+      u8R"("posturl":"https://www.correos.go.cr/nosotros/codigopostal/busqueda.html",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("CV", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\","
-      "\"state_name_type\":\"island\","
-      "\"zipex\":\"7600\","
-      "\"languages\":\"pt\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("zipex":"7600",)"
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("CW", "{"
-      "\"languages\":\"pap~nl\""
+      u8R"("languages":"pap~nl")"
       "}"));
   region_data.insert(std::make_pair("CX", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C %S %Z\","
-      "\"zipex\":\"6798\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
+      u8R"("zipex":"6798",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("CY", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"2008,3304,1900\","
-      "\"languages\":\"el~tr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"2008,3304,1900",)"
+      u8R"("languages":"el~tr")"
       "}"));
   region_data.insert(std::make_pair("CZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"100 00,251 66,530 87,110 00,225 99\","
-      "\"posturl\":\"http://psc.ceskaposta.cz/CleanForm.action\","
-      "\"languages\":\"cs\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"100 00,251 66,530 87,110 00,225 99",)"
+      u8R"("posturl":"http://psc.ceskaposta.cz/CleanForm.action",)"
+      u8R"("languages":"cs")"
       "}"));
   region_data.insert(std::make_pair("DE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"26133,53225\","
-      "\"posturl\":\"http://www.postdirekt.de/plzserver/\","
-      "\"languages\":\"de\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"26133,53225",)"
+      u8R"("posturl":"http://www.postdirekt.de/plzserver/",)"
+      u8R"("languages":"de")"
       "}"));
   region_data.insert(std::make_pair("DJ", "{"
-      "\"languages\":\"ar~fr\""
+      u8R"("languages":"ar~fr")"
       "}"));
   region_data.insert(std::make_pair("DK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"8660,1566\","
-      "\"posturl\":\"http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx\","
-      "\"languages\":\"da~de~kl\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"8660,1566",)"
+      u8R"("posturl":"http://www.postdanmark.dk/da/Privat/Kundeservice/postnummerkort/Sider/Find-postnummer.aspx",)"
+      u8R"("languages":"da~de~kl")"
       "}"));
   region_data.insert(std::make_pair("DM", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("DO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"11903,10101\","
-      "\"posturl\":\"http://inposdom.gob.do/codigo-postal/\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"11903,10101",)"
+      u8R"("posturl":"http://inposdom.gob.do/codigo-postal/",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("DZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"40304,16027\","
-      "\"languages\":\"ar~fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"40304,16027",)"
+      u8R"("languages":"ar~fr")"
       "}"));
   region_data.insert(std::make_pair("EC", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C\","
-      "\"zipex\":\"090105,092301\","
-      "\"posturl\":\"http://www.codigopostal.gob.ec/\","
-      "\"languages\":\"es~qu\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
+      u8R"("zipex":"090105,092301",)"
+      u8R"("posturl":"http://www.codigopostal.gob.ec/",)"
+      u8R"("languages":"es~qu")"
       "}"));
   region_data.insert(std::make_pair("EE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"69501,11212\","
-      "\"posturl\":\"https://www.omniva.ee/era/sihtnumbrite_otsing\","
-      "\"languages\":\"et\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"69501,11212",)"
+      u8R"("posturl":"https://www.omniva.ee/era/sihtnumbrite_otsing",)"
+      u8R"("languages":"et")"
       "}"));
   region_data.insert(std::make_pair("EG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"zipex\":\"12411,11599\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("zipex":"12411,11599",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("EH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"70000,72000\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"70000,72000",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("ER", "{"
-      "\"languages\":\"ti~en~ar\""
+      u8R"("languages":"ti~en~ar")"
       "}"));
   region_data.insert(std::make_pair("ES", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C %S\","
-      "\"require\":\"ACSZ\","
-      "\"zipex\":\"28039,28300,28070\","
-      "\"posturl\":\"http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp\","
-      "\"languages\":\"es~ca~gl~eu\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zipex":"28039,28300,28070",)"
+      u8R"("posturl":"http://www.correos.es/contenido/13-MenuRec2/04-MenuRec24/1010_s-CodPostal.asp",)"
+      u8R"("languages":"es~ca~gl~eu")"
       "}"));
   region_data.insert(std::make_pair("ET", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1000\","
-      "\"languages\":\"am\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1000",)"
+      u8R"("languages":"am")"
       "}"));
   region_data.insert(std::make_pair("FI", "{"
-      "\"fmt\":\"%O%n%N%n%A%nFI-%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"00550,00011\","
-      "\"posturl\":\"http://www.verkkoposti.com/e3/postinumeroluettelo\","
-      "\"languages\":\"fi~sv\""
+      u8R"("fmt":"%O%n%N%n%A%nFI-%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"00550,00011",)"
+      u8R"("posturl":"http://www.verkkoposti.com/e3/postinumeroluettelo",)"
+      u8R"("languages":"fi~sv")"
       "}"));
   region_data.insert(std::make_pair("FJ", "{"
-      "\"languages\":\"en~hif~fj\""
+      u8R"("languages":"en~hif~fj")"
       "}"));
   region_data.insert(std::make_pair("FK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"FIQQ 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"FIQQ 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("FM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96941,96944\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96941,96944",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("FO", "{"
-      "\"fmt\":\"%N%n%O%n%A%nFO%Z %C\","
-      "\"zipex\":\"100\","
-      "\"posturl\":\"http://www.postur.fo/\","
-      "\"languages\":\"fo\""
+      u8R"("fmt":"%N%n%O%n%A%nFO%Z %C",)"
+      u8R"("zipex":"100",)"
+      u8R"("posturl":"http://www.postur.fo/",)"
+      u8R"("languages":"fo")"
       "}"));
   region_data.insert(std::make_pair("FR", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"33380,34092,33506\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"33380,34092,33506",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("GA", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("GB", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"locality_name_type\":\"post_town\","
-      "\"zipex\":\"EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61\","
-      "\"posturl\":\"http://www.royalmail.com/postcode-finder\","
-      "\"languages\":\"en~cy~gd~ga\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("locality_name_type":"post_town",)"
+      u8R"("zipex":"EC1Y 8SY,GIR 0AA,M2 5BQ,M34 4AB,CR0 2YR,DN16 9AA,W1A 4ZZ,EC1A 1HQ,OX14 4PG,BS18 8HF,NR25 7HG,RH6 0NP,BH23 6AA,B6 5BA,SO23 9AP,PO1 3AX,BFPO 61",)"
+      u8R"("posturl":"http://www.royalmail.com/postcode-finder",)"
+      u8R"("languages":"en~cy~gd~ga")"
       "}"));
   region_data.insert(std::make_pair("GD", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("GE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"0101\","
-      "\"posturl\":\"http://www.georgianpost.ge/index.php\?page=10\","
-      "\"languages\":\"ka~ab~os\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"0101",)"
+      u8R"("posturl":"http://www.georgianpost.ge/index.php?page=10",)"
+      u8R"("languages":"ka~ab~os")"
       "}"));
   region_data.insert(std::make_pair("GF", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97300\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97300",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("GG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%nGUERNSEY%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"GY1 1AA,GY2 2BT\","
-      "\"posturl\":\"http://www.guernseypost.com/postcode_finder/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%nGUERNSEY%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"GY1 1AA,GY2 2BT",)"
+      u8R"("posturl":"http://www.guernseypost.com/postcode_finder/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("GH", "{"
-      "\"languages\":\"ak~en~ee~gaa\""
+      u8R"("languages":"ak~en~ee~gaa")"
       "}"));
   region_data.insert(std::make_pair("GI", "{"
-      "\"fmt\":\"%N%n%O%n%A%nGIBRALTAR%n%Z\","
-      "\"require\":\"A\","
-      "\"zipex\":\"GX11 1AA\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%nGIBRALTAR%n%Z",)"
+      u8R"("require":"A",)"
+      u8R"("zipex":"GX11 1AA",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("GL", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"3900,3950,3911\","
-      "\"languages\":\"kl\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"3900,3950,3911",)"
+      u8R"("languages":"kl")"
       "}"));
   region_data.insert(std::make_pair("GM", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("GN", "{"
-      "\"fmt\":\"%N%n%O%n%Z %A %C\","
-      "\"zipex\":\"001,200,100\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%N%n%O%n%Z %A %C",)"
+      u8R"("zipex":"001,200,100",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("GP", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97100\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97100",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("GQ", "{"
-      "\"languages\":\"es~fr~pt\""
+      u8R"("languages":"es~fr~pt")"
       "}"));
   region_data.insert(std::make_pair("GR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"151 24,151 10,101 88\","
-      "\"posturl\":\"http://www.elta.gr/findapostcode.aspx\","
-      "\"languages\":\"el\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"151 24,151 10,101 88",)"
+      u8R"("posturl":"http://www.elta.gr/findapostcode.aspx",)"
+      u8R"("languages":"el")"
       "}"));
   region_data.insert(std::make_pair("GS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"SIQQ 1ZZ\""
+      u8R"("fmt":"%N%n%O%n%A%n%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"SIQQ 1ZZ")"
       "}"));
   region_data.insert(std::make_pair("GT", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z- %C\","
-      "\"zipex\":\"09001,01501\","
-      "\"languages\":\"es~quc\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z- %C",)"
+      u8R"("zipex":"09001,01501",)"
+      u8R"("languages":"es~quc")"
       "}"));
   region_data.insert(std::make_pair("GU", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"require\":\"ACZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"zipex\":\"96910,96931\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en~ch\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("zipex":"96910,96931",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en~ch")"
       "}"));
   region_data.insert(std::make_pair("GW", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1000,1011\","
-      "\"languages\":\"pt\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1000,1011",)"
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("GY", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("HK", "{"
-      "\"fmt\":\"%S%n%C%n%A%n%O%n%N\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C%n%S\","
-      "\"require\":\"AS\","
-      "\"state_name_type\":\"area\","
-      "\"locality_name_type\":\"district\","
-      "\"languages\":\"zh-Hant~en\""
+      u8R"("fmt":"%S%n%C%n%A%n%O%n%N",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C%n%S",)"
+      u8R"("require":"AS",)"
+      u8R"("state_name_type":"area",)"
+      u8R"("locality_name_type":"district",)"
+      u8R"("languages":"zh-Hant~en")"
       "}"));
   region_data.insert(std::make_pair("HM", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C %S %Z\","
-      "\"zipex\":\"7050\""
+      u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
+      u8R"("zipex":"7050")"
       "}"));
   region_data.insert(std::make_pair("HN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S%n%Z\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"31301\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S%n%Z",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"31301",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("HR", "{"
-      "\"fmt\":\"%N%n%O%n%A%nHR-%Z %C\","
-      "\"zipex\":\"10000,21001,10002\","
-      "\"posturl\":\"http://www.posta.hr/default.aspx\?pretpum\","
-      "\"languages\":\"hr~it\""
+      u8R"("fmt":"%N%n%O%n%A%nHR-%Z %C",)"
+      u8R"("zipex":"10000,21001,10002",)"
+      u8R"("posturl":"http://www.posta.hr/default.aspx?pretpum",)"
+      u8R"("languages":"hr~it")"
       "}"));
   region_data.insert(std::make_pair("HT", "{"
-      "\"fmt\":\"%N%n%O%n%A%nHT%Z %C\","
-      "\"zipex\":\"6120,5310,6110,8510\","
-      "\"languages\":\"ht~fr\""
+      u8R"("fmt":"%N%n%O%n%A%nHT%Z %C",)"
+      u8R"("zipex":"6120,5310,6110,8510",)"
+      u8R"("languages":"ht~fr")"
       "}"));
   region_data.insert(std::make_pair("HU", "{"
-      "\"fmt\":\"%N%n%O%n%C%n%A%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"1037,2380,1540\","
-      "\"posturl\":\"http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso\","
-      "\"languages\":\"hu\""
+      u8R"("fmt":"%N%n%O%n%C%n%A%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"1037,2380,1540",)"
+      u8R"("posturl":"http://posta.hu/ugyfelszolgalat/iranyitoszam_kereso",)"
+      u8R"("languages":"hu")"
       "}"));
   region_data.insert(std::make_pair("ID", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\","
-      "\"require\":\"AS\","
-      "\"zipex\":\"40115\","
-      "\"languages\":\"id\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
+      u8R"("require":"AS",)"
+      u8R"("zipex":"40115",)"
+      u8R"("languages":"id")"
       "}"));
   region_data.insert(std::make_pair("IE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%C%n%S %Z\","
-      "\"zip_name_type\":\"eircode\","
-      "\"state_name_type\":\"county\","
-      "\"sublocality_name_type\":\"townland\","
-      "\"zipex\":\"A65 F4E2\","
-      "\"posturl\":\"https://finder.eircode.ie\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%C%n%S %Z",)"
+      u8R"("zip_name_type":"eircode",)"
+      u8R"("state_name_type":"county",)"
+      u8R"("sublocality_name_type":"townland",)"
+      u8R"("zipex":"A65 F4E2",)"
+      u8R"("posturl":"https://finder.eircode.ie",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("IL", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"9614303\","
-      "\"posturl\":\"http://www.israelpost.co.il/zipcode.nsf/demozip\?openform\","
-      "\"languages\":\"iw~ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"9614303",)"
+      u8R"("posturl":"http://www.israelpost.co.il/zipcode.nsf/demozip?openform",)"
+      u8R"("languages":"iw~ar")"
       "}"));
   region_data.insert(std::make_pair("IM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"IM2 1AA,IM99 1PS\","
-      "\"posturl\":\"http://www.gov.im/post/postal/fr_main.asp\","
-      "\"languages\":\"en~gv\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"IM2 1AA,IM99 1PS",)"
+      u8R"("posturl":"http://www.gov.im/post/postal/fr_main.asp",)"
+      u8R"("languages":"en~gv")"
       "}"));
   region_data.insert(std::make_pair("IN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z%n%S\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"pin\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"110034,110001\","
-      "\"posturl\":\"https://www.indiapost.gov.in/vas/pages/FindPinCode.aspx\","
-      "\"languages\":\"en~hi\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z%n%S",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"pin",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"110034,110001",)"
+      u8R"("posturl":"https://www.indiapost.gov.in/vas/pages/FindPinCode.aspx",)"
+      u8R"("languages":"en~hi")"
       "}"));
   region_data.insert(std::make_pair("IO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"BBND 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"BBND 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("IQ", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C, %S%n%Z\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"31001\","
-      "\"languages\":\"ar~ckb~az-Arab\""
+      u8R"("fmt":"%O%n%N%n%A%n%C, %S%n%Z",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"31001",)"
+      u8R"("languages":"ar~ckb~az-Arab")"
       "}"));
   region_data.insert(std::make_pair("IR", "{"
-      "\"fmt\":\"%O%n%N%n%S%n%C, %D%n%A%n%Z\","
-      "\"sublocality_name_type\":\"neighborhood\","
-      "\"zipex\":\"11936-12345\","
-      "\"languages\":\"fa\""
+      u8R"("fmt":"%O%n%N%n%S%n%C, %D%n%A%n%Z",)"
+      u8R"("sublocality_name_type":"neighborhood",)"
+      u8R"("zipex":"11936-12345",)"
+      u8R"("languages":"fa")"
       "}"));
   region_data.insert(std::make_pair("IS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"320,121,220,110\","
-      "\"posturl\":\"http://www.postur.is/einstaklingar/posthus/postnumer/\","
-      "\"languages\":\"is\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"320,121,220,110",)"
+      u8R"("posturl":"http://www.postur.is/einstaklingar/posthus/postnumer/",)"
+      u8R"("languages":"is")"
       "}"));
   region_data.insert(std::make_pair("IT", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C %S\","
-      "\"require\":\"ACSZ\","
-      "\"zipex\":\"00144,47037,39049\","
-      "\"posturl\":\"http://www.poste.it/online/cercacap/\","
-      "\"languages\":\"it\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zipex":"00144,47037,39049",)"
+      u8R"("posturl":"http://www.poste.it/online/cercacap/",)"
+      u8R"("languages":"it")"
       "}"));
   region_data.insert(std::make_pair("JE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%nJERSEY%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"JE1 1AA,JE2 2BT\","
-      "\"posturl\":\"http://www.jerseypost.com/tools/postcode-address-finder/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%nJERSEY%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"JE1 1AA,JE2 2BT",)"
+      u8R"("posturl":"http://www.jerseypost.com/tools/postcode-address-finder/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("JM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S %X\","
-      "\"require\":\"ACS\","
-      "\"state_name_type\":\"parish\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S %X",)"
+      u8R"("require":"ACS",)"
+      u8R"("state_name_type":"parish",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("JO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"11937,11190\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"11937,11190",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("JP", "{"
-      "\"fmt\":\"\\u3012%Z%n%S%C%n%A%n%O%n%N\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C, %S%n%Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"prefecture\","
-      "\"zipex\":\"154-0023,350-1106,951-8073,112-0001,208-0032,231-0012\","
-      "\"posturl\":\"http://search.post.japanpost.jp/zipcode/\","
-      "\"languages\":\"ja\""
+      u8R"("fmt":"〒%Z%n%S%C%n%A%n%O%n%N",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C, %S%n%Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"prefecture",)"
+      u8R"("zipex":"154-0023,350-1106,951-8073,112-0001,208-0032,231-0012",)"
+      u8R"("posturl":"http://search.post.japanpost.jp/zipcode/",)"
+      u8R"("languages":"ja")"
       "}"));
   region_data.insert(std::make_pair("KE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"20100,00100\","
-      "\"languages\":\"sw~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"20100,00100",)"
+      u8R"("languages":"sw~en")"
       "}"));
   region_data.insert(std::make_pair("KG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"720001\","
-      "\"languages\":\"ky~ru\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"720001",)"
+      u8R"("languages":"ky~ru")"
       "}"));
   region_data.insert(std::make_pair("KH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"12203,14206,12000\","
-      "\"languages\":\"km\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"12203,14206,12000",)"
+      u8R"("languages":"km")"
       "}"));
   region_data.insert(std::make_pair("KI", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%S%n%C\","
-      "\"state_name_type\":\"island\","
-      "\"languages\":\"en~gil\""
+      u8R"("fmt":"%N%n%O%n%A%n%S%n%C",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("languages":"en~gil")"
       "}"));
   region_data.insert(std::make_pair("KM", "{"
-      "\"languages\":\"ar~fr~zdj~wni\""
+      u8R"("languages":"ar~fr~zdj~wni")"
       "}"));
   region_data.insert(std::make_pair("KN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S\","
-      "\"require\":\"ACS\","
-      "\"state_name_type\":\"island\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S",)"
+      u8R"("require":"ACS",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("KR", "{"
-      "\"fmt\":\"%S %C%D%n%A%n%O%n%N%n%Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%D%n%C%n%S%n%Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"do_si\","
-      "\"sublocality_name_type\":\"district\","
-      "\"zipex\":\"03051\","
-      "\"posturl\":\"http://www.epost.go.kr/search/zipcode/search5.jsp\","
-      "\"languages\":\"ko\""
+      u8R"("fmt":"%S %C%D%n%A%n%O%n%N%n%Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%D%n%C%n%S%n%Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"do_si",)"
+      u8R"("sublocality_name_type":"district",)"
+      u8R"("zipex":"03051",)"
+      u8R"("posturl":"http://www.epost.go.kr/search/zipcode/search5.jsp",)"
+      u8R"("languages":"ko")"
       "}"));
   region_data.insert(std::make_pair("KW", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"54541,54551,54404,13009\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"54541,54551,54404,13009",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("KY", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%S %Z\","
-      "\"require\":\"AS\","
-      "\"state_name_type\":\"island\","
-      "\"zipex\":\"KY1-1100,KY1-1702,KY2-2101\","
-      "\"posturl\":\"http://www.caymanpost.gov.ky/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%S %Z",)"
+      u8R"("require":"AS",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("zipex":"KY1-1100,KY1-1702,KY2-2101",)"
+      u8R"("posturl":"http://www.caymanpost.gov.ky/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("KZ", "{"
-      "\"fmt\":\"%Z%n%S%n%C%n%A%n%O%n%N\","
-      "\"zipex\":\"040900,050012\","
-      "\"languages\":\"ru~kk\""
+      u8R"("fmt":"%Z%n%S%n%C%n%A%n%O%n%N",)"
+      u8R"("zipex":"040900,050012",)"
+      u8R"("languages":"ru~kk")"
       "}"));
   region_data.insert(std::make_pair("LA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"01160,01000\","
-      "\"languages\":\"lo\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"01160,01000",)"
+      u8R"("languages":"lo")"
       "}"));
   region_data.insert(std::make_pair("LB", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"2038 3054,1107 2810,1000\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"2038 3054,1107 2810,1000",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("LC", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("LI", "{"
-      "\"fmt\":\"%O%n%N%n%A%nFL-%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"9496,9491,9490,9485\","
-      "\"posturl\":\"http://www.post.ch/db/owa/pv_plz_pack/pr_main\","
-      "\"languages\":\"de~gsw\""
+      u8R"("fmt":"%O%n%N%n%A%nFL-%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"9496,9491,9490,9485",)"
+      u8R"("posturl":"http://www.post.ch/db/owa/pv_plz_pack/pr_main",)"
+      u8R"("languages":"de~gsw")"
       "}"));
   region_data.insert(std::make_pair("LK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"20000,00100\","
-      "\"posturl\":\"http://www.slpost.gov.lk/\","
-      "\"languages\":\"si~ta\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"20000,00100",)"
+      u8R"("posturl":"http://www.slpost.gov.lk/",)"
+      u8R"("languages":"si~ta")"
       "}"));
   region_data.insert(std::make_pair("LR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1000\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1000",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("LS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"100\","
-      "\"languages\":\"st~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"100",)"
+      u8R"("languages":"st~en")"
       "}"));
   region_data.insert(std::make_pair("LT", "{"
-      "\"fmt\":\"%O%n%N%n%A%nLT-%Z %C\","
-      "\"zipex\":\"04340,03500\","
-      "\"posturl\":\"http://www.post.lt/lt/\?id=316\","
-      "\"languages\":\"lt\""
+      u8R"("fmt":"%O%n%N%n%A%nLT-%Z %C",)"
+      u8R"("zipex":"04340,03500",)"
+      u8R"("posturl":"http://www.post.lt/lt/?id=316",)"
+      u8R"("languages":"lt")"
       "}"));
   region_data.insert(std::make_pair("LU", "{"
-      "\"fmt\":\"%O%n%N%n%A%nL-%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"4750,2998\","
-      "\"posturl\":\"https://www.post.lu/fr/grandes-entreprises/solutions-postales/rechercher-un-code-postal\","
-      "\"languages\":\"fr~lb~de\""
+      u8R"("fmt":"%O%n%N%n%A%nL-%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"4750,2998",)"
+      u8R"("posturl":"https://www.post.lu/fr/grandes-entreprises/solutions-postales/rechercher-un-code-postal",)"
+      u8R"("languages":"fr~lb~de")"
       "}"));
   region_data.insert(std::make_pair("LV", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %Z\","
-      "\"zipex\":\"LV-1073,LV-1000\","
-      "\"posturl\":\"http://www.pasts.lv/lv/uzzinas/nodalas/\","
-      "\"languages\":\"lv\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %Z",)"
+      u8R"("zipex":"LV-1073,LV-1000",)"
+      u8R"("posturl":"http://www.pasts.lv/lv/uzzinas/nodalas/",)"
+      u8R"("languages":"lv")"
       "}"));
   region_data.insert(std::make_pair("LY", "{"
-      "\"languages\":\"ar\""
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("MA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"53000,10000,20050,16052\","
-      "\"languages\":\"ar~fr~tzm\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"53000,10000,20050,16052",)"
+      u8R"("languages":"ar~fr~tzm")"
       "}"));
   region_data.insert(std::make_pair("MC", "{"
-      "\"fmt\":\"%N%n%O%n%A%nMC-%Z %C %X\","
-      "\"zipex\":\"98000,98020,98011,98001\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%N%n%O%n%A%nMC-%Z %C %X",)"
+      u8R"("zipex":"98000,98020,98011,98001",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("MD", "{"
-      "\"fmt\":\"%N%n%O%n%A%nMD-%Z %C\","
-      "\"zipex\":\"2012,2019\","
-      "\"languages\":\"ro\""
+      u8R"("fmt":"%N%n%O%n%A%nMD-%Z %C",)"
+      u8R"("zipex":"2012,2019",)"
+      u8R"("languages":"ro")"
       "}"));
   region_data.insert(std::make_pair("ME", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"81257,81258,81217,84314,85366\","
-      "\"languages\":\"sr-Latn\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"81257,81258,81217,84314,85366",)"
+      u8R"("languages":"sr-Latn")"
       "}"));
   region_data.insert(std::make_pair("MF", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97100\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97100",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("MG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"501,101\","
-      "\"languages\":\"mg~fr~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"501,101",)"
+      u8R"("languages":"mg~fr~en")"
       "}"));
   region_data.insert(std::make_pair("MH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96960,96970\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en~mh\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96960,96970",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en~mh")"
       "}"));
   region_data.insert(std::make_pair("MK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1314,1321,1443,1062\","
-      "\"languages\":\"mk~sq\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1314,1321,1443,1062",)"
+      u8R"("languages":"mk~sq")"
       "}"));
   region_data.insert(std::make_pair("ML", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("MM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %Z\","
-      "\"zipex\":\"11181\","
-      "\"languages\":\"my\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %Z",)"
+      u8R"("zipex":"11181",)"
+      u8R"("languages":"my")"
       "}"));
   region_data.insert(std::make_pair("MN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\","
-      "\"zipex\":\"65030,65270\","
-      "\"posturl\":\"http://www.zipcode.mn/\","
-      "\"languages\":\"mn\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
+      u8R"("zipex":"65030,65270",)"
+      u8R"("posturl":"http://www.zipcode.mn/",)"
+      u8R"("languages":"mn")"
       "}"));
   region_data.insert(std::make_pair("MO", "{"
-      "\"fmt\":\"%A%n%O%n%N\","
-      "\"lfmt\":\"%N%n%O%n%A\","
-      "\"require\":\"A\","
-      "\"languages\":\"zh-Hant~pt\""
+      u8R"("fmt":"%A%n%O%n%N",)"
+      u8R"("lfmt":"%N%n%O%n%A",)"
+      u8R"("require":"A",)"
+      u8R"("languages":"zh-Hant~pt")"
       "}"));
   region_data.insert(std::make_pair("MP", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96950,96951,96952\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96950,96951,96952",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("MQ", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97220\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97220",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("MR", "{"
-      "\"languages\":\"ar\""
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("MS", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("MT", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753\","
-      "\"posturl\":\"http://postcodes.maltapost.com/\","
-      "\"languages\":\"mt~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"NXR 01,ZTN 05,GPO 01,BZN 1130,SPB 6031,VCT 1753",)"
+      u8R"("posturl":"http://postcodes.maltapost.com/",)"
+      u8R"("languages":"mt~en")"
       "}"));
   region_data.insert(std::make_pair("MU", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C\","
-      "\"zipex\":\"42602\","
-      "\"languages\":\"en~fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
+      u8R"("zipex":"42602",)"
+      u8R"("languages":"en~fr")"
       "}"));
   region_data.insert(std::make_pair("MV", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"20026\","
-      "\"posturl\":\"http://www.maldivespost.com/\?lid=10\","
-      "\"languages\":\"dv\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"20026",)"
+      u8R"("posturl":"http://www.maldivespost.com/?lid=10",)"
+      u8R"("languages":"dv")"
       "}"));
   region_data.insert(std::make_pair("MW", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %X\","
-      "\"languages\":\"en~ny\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %X",)"
+      u8R"("languages":"en~ny")"
       "}"));
   region_data.insert(std::make_pair("MX", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%Z %C, %S\","
-      "\"require\":\"ACZ\","
-      "\"state_name_type\":\"state\","
-      "\"sublocality_name_type\":\"neighborhood\","
-      "\"zipex\":\"02860,77520,06082\","
-      "\"posturl\":\"http://www.correosdemexico.gob.mx/ServiciosLinea/Paginas/ccpostales.aspx\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%Z %C, %S",)"
+      u8R"("require":"ACZ",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("sublocality_name_type":"neighborhood",)"
+      u8R"("zipex":"02860,77520,06082",)"
+      u8R"("posturl":"http://www.correosdemexico.gob.mx/ServiciosLinea/Paginas/ccpostales.aspx",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("MY", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%Z %C%n%S\","
-      "\"require\":\"ACZ\","
-      "\"state_name_type\":\"state\","
-      "\"sublocality_name_type\":\"village_township\","
-      "\"zipex\":\"43000,50754,88990,50670\","
-      "\"posturl\":\"http://www.pos.com.my\","
-      "\"languages\":\"ms\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%Z %C%n%S",)"
+      u8R"("require":"ACZ",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("sublocality_name_type":"village_township",)"
+      u8R"("zipex":"43000,50754,88990,50670",)"
+      u8R"("posturl":"http://www.pos.com.my",)"
+      u8R"("languages":"ms")"
       "}"));
   region_data.insert(std::make_pair("MZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1102,1119,3212\","
-      "\"languages\":\"pt\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1102,1119,3212",)"
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("NA", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("NC", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"98814,98800,98810\","
-      "\"posturl\":\"http://poste.opt.nc/index.php\?option=com_content&view=article&id=80&Itemid=131\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"98814,98800,98810",)"
+      u8R"("posturl":"http://poste.opt.nc/index.php?option=com_content&view=article&id=80&Itemid=131",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("NE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"8001\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"8001",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("NF", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%C %S %Z\","
-      "\"zipex\":\"2899\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%O%n%N%n%A%n%C %S %Z",)"
+      u8R"("zipex":"2899",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("NG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%C %Z%n%S\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"930283,300001,931104\","
-      "\"posturl\":\"http://www.nigeriapostcodes.com/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%C %Z%n%S",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"930283,300001,931104",)"
+      u8R"("posturl":"http://www.nigeriapostcodes.com/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("NI", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C, %S\","
-      "\"state_name_type\":\"department\","
-      "\"zipex\":\"52000\","
-      "\"posturl\":\"http://www.correos.gob.ni/index.php/codigo-postal-2\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C, %S",)"
+      u8R"("state_name_type":"department",)"
+      u8R"("zipex":"52000",)"
+      u8R"("posturl":"http://www.correos.gob.ni/index.php/codigo-postal-2",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("NL", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"1234 AB,2490 AA\","
-      "\"posturl\":\"http://www.postnl.nl/voorthuis/\","
-      "\"languages\":\"nl~fy\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"1234 AB,2490 AA",)"
+      u8R"("posturl":"http://www.postnl.nl/voorthuis/",)"
+      u8R"("languages":"nl~fy")"
       "}"));
   region_data.insert(std::make_pair("NO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"locality_name_type\":\"post_town\","
-      "\"zipex\":\"0025,0107,6631\","
-      "\"posturl\":\"http://adressesok.posten.no/nb/postal_codes/search\","
-      "\"languages\":\"no~nn~se\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("locality_name_type":"post_town",)"
+      u8R"("zipex":"0025,0107,6631",)"
+      u8R"("posturl":"http://adressesok.posten.no/nb/postal_codes/search",)"
+      u8R"("languages":"no~nn~se")"
       "}"));
   region_data.insert(std::make_pair("NP", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"44601\","
-      "\"posturl\":\"http://www.gpo.gov.np/postalcode.aspx\","
-      "\"languages\":\"ne\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"44601",)"
+      u8R"("posturl":"http://www.gpo.gov.np/postalcode.aspx",)"
+      u8R"("languages":"ne")"
       "}"));
   region_data.insert(std::make_pair("NR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%S\","
-      "\"require\":\"AS\","
-      "\"state_name_type\":\"district\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%S",)"
+      u8R"("require":"AS",)"
+      u8R"("state_name_type":"district",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("NU", "{"
-      "\"languages\":\"en~niu\""
+      u8R"("languages":"en~niu")"
       "}"));
   region_data.insert(std::make_pair("NZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%C %Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"6001,6015,6332,8252,1030\","
-      "\"posturl\":\"http://www.nzpost.co.nz/Cultures/en-NZ/OnlineTools/PostCodeFinder/\","
-      "\"languages\":\"en~mi\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%C %Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"6001,6015,6332,8252,1030",)"
+      u8R"("posturl":"http://www.nzpost.co.nz/Cultures/en-NZ/OnlineTools/PostCodeFinder/",)"
+      u8R"("languages":"en~mi")"
       "}"));
   region_data.insert(std::make_pair("OM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z%n%C\","
-      "\"zipex\":\"133,112,111\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z%n%C",)"
+      u8R"("zipex":"133,112,111",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("PA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("PE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z%n%S\","
-      "\"zipex\":\"LIMA 23,LIMA 42,CALLAO 2,02001\","
-      "\"posturl\":\"http://www.serpost.com.pe/cpostal/codigo\","
-      "\"languages\":\"es~qu\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z%n%S",)"
+      u8R"("zipex":"LIMA 23,LIMA 42,CALLAO 2,02001",)"
+      u8R"("posturl":"http://www.serpost.com.pe/cpostal/codigo",)"
+      u8R"("languages":"es~qu")"
       "}"));
   region_data.insert(std::make_pair("PF", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C %S\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"island\","
-      "\"zipex\":\"98709\","
-      "\"languages\":\"fr~ty\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("zipex":"98709",)"
+      u8R"("languages":"fr~ty")"
       "}"));
   region_data.insert(std::make_pair("PG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z %S\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"111\","
-      "\"languages\":\"tpi~en~ho\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z %S",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"111",)"
+      u8R"("languages":"tpi~en~ho")"
       "}"));
   region_data.insert(std::make_pair("PH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D, %C%n%Z %S\","
-      "\"zipex\":\"1008,1050,1135,1207,2000,1000\","
-      "\"posturl\":\"http://www.philpost.gov.ph/\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%D, %C%n%Z %S",)"
+      u8R"("zipex":"1008,1050,1135,1207,2000,1000",)"
+      u8R"("posturl":"http://www.philpost.gov.ph/",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("PK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C-%Z\","
-      "\"zipex\":\"44000\","
-      "\"posturl\":\"http://www.pakpost.gov.pk/postcode/postcode.html\","
-      "\"languages\":\"ur~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C-%Z",)"
+      u8R"("zipex":"44000",)"
+      u8R"("posturl":"http://www.pakpost.gov.pk/postcode/postcode.html",)"
+      u8R"("languages":"ur~en")"
       "}"));
   region_data.insert(std::make_pair("PL", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"00-950,05-470,48-300,32-015,00-940\","
-      "\"posturl\":\"http://kody.poczta-polska.pl/\","
-      "\"languages\":\"pl~de~csb~lt\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"00-950,05-470,48-300,32-015,00-940",)"
+      u8R"("posturl":"http://kody.poczta-polska.pl/",)"
+      u8R"("languages":"pl~de~csb~lt")"
       "}"));
   region_data.insert(std::make_pair("PM", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97500\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97500",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("PN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"PCRN 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"PCRN 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("PR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C PR %Z\","
-      "\"require\":\"ACZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"zipex\":\"00930\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"es~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C PR %Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("zipex":"00930",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"es~en")"
       "}"));
   region_data.insert(std::make_pair("PS", "{"
-      "\"languages\":\"ar\""
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("PT", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"2725-079,1250-096,1201-950,2860-571,1208-148\","
-      "\"posturl\":\"http://www.ctt.pt/feapl_2/app/open/tools.jspx\?tool=1\","
-      "\"languages\":\"pt\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"2725-079,1250-096,1201-950,2860-571,1208-148",)"
+      u8R"("posturl":"http://www.ctt.pt/feapl_2/app/open/tools.jspx?tool=1",)"
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("PW", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96940\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"pau~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96940",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"pau~en")"
       "}"));
   region_data.insert(std::make_pair("PY", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1536,1538,1209\","
-      "\"languages\":\"gn~es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1536,1538,1209",)"
+      u8R"("languages":"gn~es")"
       "}"));
   region_data.insert(std::make_pair("QA", "{"
-      "\"languages\":\"ar\""
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("RE", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97400\","
-      "\"posturl\":\"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97400",)"
+      u8R"("posturl":"http://www.laposte.fr/Particulier/Utiliser-nos-outils-pratiques/Outils-et-documents/Trouvez-un-code-postal",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("RO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"060274,061357,200716\","
-      "\"posturl\":\"http://www.posta-romana.ro/zip_codes\","
-      "\"languages\":\"ro\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"060274,061357,200716",)"
+      u8R"("posturl":"http://www.posta-romana.ro/zip_codes",)"
+      u8R"("languages":"ro")"
       "}"));
   region_data.insert(std::make_pair("RS", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"106314\","
-      "\"posturl\":\"http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp\","
-      "\"languages\":\"sr~sr-Latn~hu~ro~hr~sk~uk\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"106314",)"
+      u8R"("posturl":"http://www.posta.rs/struktura/lat/aplikacije/pronadji/nadji-postu.asp",)"
+      u8R"("languages":"sr~sr-Latn~hu~ro~hr~sk~uk")"
       "}"));
   region_data.insert(std::make_pair("RU", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"oblast\","
-      "\"zipex\":\"247112,103375,188300\","
-      "\"posturl\":\"http://info.russianpost.ru/servlet/department\","
-      "\"languages\":\"ru\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"oblast",)"
+      u8R"("zipex":"247112,103375,188300",)"
+      u8R"("posturl":"http://info.russianpost.ru/servlet/department",)"
+      u8R"("languages":"ru")"
       "}"));
   region_data.insert(std::make_pair("RW", "{"
-      "\"languages\":\"rw~en~fr\""
+      u8R"("languages":"rw~en~fr")"
       "}"));
   region_data.insert(std::make_pair("SA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"11564,11187,11142\","
-      "\"languages\":\"ar\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"11564,11187,11142",)"
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("SB", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("SC", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S\","
-      "\"state_name_type\":\"island\","
-      "\"languages\":\"fr~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("languages":"fr~en")"
       "}"));
   region_data.insert(std::make_pair("SE", "{"
-      "\"fmt\":\"%O%n%N%n%A%nSE-%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"locality_name_type\":\"post_town\","
-      "\"zipex\":\"11455,12345,10500\","
-      "\"posturl\":\"http://www.posten.se/sv/Kundservice/Sidor/Sok-postnummer-resultat.aspx\","
-      "\"languages\":\"sv~fi\""
+      u8R"("fmt":"%O%n%N%n%A%nSE-%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("locality_name_type":"post_town",)"
+      u8R"("zipex":"11455,12345,10500",)"
+      u8R"("posturl":"http://www.posten.se/sv/Kundservice/Sidor/Sok-postnummer-resultat.aspx",)"
+      u8R"("languages":"sv~fi")"
       "}"));
   region_data.insert(std::make_pair("SG", "{"
-      "\"fmt\":\"%N%n%O%n%A%nSINGAPORE %Z\","
-      "\"require\":\"AZ\","
-      "\"zipex\":\"546080,308125,408600\","
-      "\"posturl\":\"https://www.singpost.com/find-postal-code\","
-      "\"languages\":\"en~zh~ms~ta\""
+      u8R"("fmt":"%N%n%O%n%A%nSINGAPORE %Z",)"
+      u8R"("require":"AZ",)"
+      u8R"("zipex":"546080,308125,408600",)"
+      u8R"("posturl":"https://www.singpost.com/find-postal-code",)"
+      u8R"("languages":"en~zh~ms~ta")"
       "}"));
   region_data.insert(std::make_pair("SH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"STHL 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"STHL 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("SI", "{"
-      "\"fmt\":\"%N%n%O%n%A%nSI- %Z %C\","
-      "\"zipex\":\"4000,1001,2500\","
-      "\"languages\":\"sl\""
+      u8R"("fmt":"%N%n%O%n%A%nSI- %Z %C",)"
+      u8R"("zipex":"4000,1001,2500",)"
+      u8R"("languages":"sl")"
       "}"));
   region_data.insert(std::make_pair("SJ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"ACZ\","
-      "\"locality_name_type\":\"post_town\","
-      "\"zipex\":\"9170\","
-      "\"posturl\":\"http://epab.posten.no/\","
-      "\"languages\":\"no\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"ACZ",)"
+      u8R"("locality_name_type":"post_town",)"
+      u8R"("zipex":"9170",)"
+      u8R"("posturl":"http://epab.posten.no/",)"
+      u8R"("languages":"no")"
       "}"));
   region_data.insert(std::make_pair("SK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"010 01,023 14,972 48,921 01,975 99\","
-      "\"posturl\":\"http://psc.posta.sk\","
-      "\"languages\":\"sk\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"010 01,023 14,972 48,921 01,975 99",)"
+      u8R"("posturl":"http://psc.posta.sk",)"
+      u8R"("languages":"sk")"
       "}"));
   region_data.insert(std::make_pair("SL", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("SM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"require\":\"AZ\","
-      "\"zipex\":\"47890,47891,47895,47899\","
-      "\"posturl\":\"http://www.poste.it/online/cercacap/\","
-      "\"languages\":\"it\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("require":"AZ",)"
+      u8R"("zipex":"47890,47891,47895,47899",)"
+      u8R"("posturl":"http://www.poste.it/online/cercacap/",)"
+      u8R"("languages":"it")"
       "}"));
   region_data.insert(std::make_pair("SN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"12500,46024,16556,10000\","
-      "\"languages\":\"wo~fr~ff~srr~dyo~sav~mfv~bjt~snf~knf~bsc~mey~tnr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"12500,46024,16556,10000",)"
+      u8R"("languages":"wo~fr~ff~srr~dyo~sav~mfv~bjt~snf~knf~bsc~mey~tnr")"
       "}"));
   region_data.insert(std::make_pair("SO", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"JH 09010,AD 11010\","
-      "\"languages\":\"so\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"JH 09010,AD 11010",)"
+      u8R"("languages":"so")"
       "}"));
   region_data.insert(std::make_pair("SR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S\","
-      "\"languages\":\"nl\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
+      u8R"("languages":"nl")"
       "}"));
   region_data.insert(std::make_pair("SS", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("ST", "{"
-      "\"languages\":\"pt\""
+      u8R"("languages":"pt")"
       "}"));
   region_data.insert(std::make_pair("SV", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z-%C%n%S\","
-      "\"require\":\"ACS\","
-      "\"zipex\":\"CP 1101\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z-%C%n%S",)"
+      u8R"("require":"ACS",)"
+      u8R"("zipex":"CP 1101",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("SX", "{"
-      "\"languages\":\"en~nl\""
+      u8R"("languages":"en~nl")"
       "}"));
   region_data.insert(std::make_pair("SZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"H100\","
-      "\"posturl\":\"http://www.sptc.co.sz/swazipost/codes/index.php\","
-      "\"languages\":\"en~ss\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"H100",)"
+      u8R"("posturl":"http://www.sptc.co.sz/swazipost/codes/index.php",)"
+      u8R"("languages":"en~ss")"
       "}"));
   region_data.insert(std::make_pair("TA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"zipex\":\"TDCU 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("zipex":"TDCU 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("TC", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"TKCA 1ZZ\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"TKCA 1ZZ",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("TD", "{"
-      "\"languages\":\"fr~ar\""
+      u8R"("languages":"fr~ar")"
       "}"));
   region_data.insert(std::make_pair("TF", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("TG", "{"
-      "\"languages\":\"fr\""
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("TH", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D %C%n%S %Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%D, %C%n%S %Z\","
-      "\"zipex\":\"10150,10210\","
-      "\"languages\":\"th\""
+      u8R"("fmt":"%N%n%O%n%A%n%D %C%n%S %Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%D, %C%n%S %Z",)"
+      u8R"("zipex":"10150,10210",)"
+      u8R"("languages":"th")"
       "}"));
   region_data.insert(std::make_pair("TJ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"735450,734025\","
-      "\"languages\":\"tg\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"735450,734025",)"
+      u8R"("languages":"tg")"
       "}"));
   region_data.insert(std::make_pair("TK", "{"
-      "\"languages\":\"en~tkl\""
+      u8R"("languages":"en~tkl")"
       "}"));
   region_data.insert(std::make_pair("TL", "{"
-      "\"languages\":\"pt~tet\""
+      u8R"("languages":"pt~tet")"
       "}"));
   region_data.insert(std::make_pair("TM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"744000\","
-      "\"languages\":\"tk\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"744000",)"
+      u8R"("languages":"tk")"
       "}"));
   region_data.insert(std::make_pair("TN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"1002,8129,3100,1030\","
-      "\"posturl\":\"http://www.poste.tn/codes.php\","
-      "\"languages\":\"ar~fr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"1002,8129,3100,1030",)"
+      u8R"("posturl":"http://www.poste.tn/codes.php",)"
+      u8R"("languages":"ar~fr")"
       "}"));
   region_data.insert(std::make_pair("TO", "{"
-      "\"languages\":\"to~en\""
+      u8R"("languages":"to~en")"
       "}"));
   region_data.insert(std::make_pair("TR", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C/%S\","
-      "\"require\":\"ACZ\","
-      "\"locality_name_type\":\"district\","
-      "\"zipex\":\"01960,06101\","
-      "\"posturl\":\"http://postakodu.ptt.gov.tr/\","
-      "\"languages\":\"tr\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C/%S",)"
+      u8R"("require":"ACZ",)"
+      u8R"("locality_name_type":"district",)"
+      u8R"("zipex":"01960,06101",)"
+      u8R"("posturl":"http://postakodu.ptt.gov.tr/",)"
+      u8R"("languages":"tr")"
       "}"));
   region_data.insert(std::make_pair("TT", "{"
-      "\"languages\":\"en\""
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("TV", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S\","
-      "\"state_name_type\":\"island\","
-      "\"languages\":\"tyv\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S",)"
+      u8R"("state_name_type":"island",)"
+      u8R"("languages":"tyv")"
       "}"));
   region_data.insert(std::make_pair("TW", "{"
-      "\"fmt\":\"%Z%n%S%C%n%A%n%O%n%N\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C, %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"county\","
-      "\"zipex\":\"104,106,10603,40867\","
-      "\"posturl\":\"http://www.post.gov.tw/post/internet/f_searchzone/index.jsp\?ID=190102\","
-      "\"languages\":\"zh-Hant\""
+      u8R"("fmt":"%Z%n%S%C%n%A%n%O%n%N",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C, %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"county",)"
+      u8R"("zipex":"104,106,10603,40867",)"
+      u8R"("posturl":"http://www.post.gov.tw/post/internet/f_searchzone/index.jsp?ID=190102",)"
+      u8R"("languages":"zh-Hant")"
       "}"));
   region_data.insert(std::make_pair("TZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"6090,34413\","
-      "\"languages\":\"sw~en\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"6090,34413",)"
+      u8R"("languages":"sw~en")"
       "}"));
   region_data.insert(std::make_pair("UA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C%n%S%n%Z\","
-      "\"require\":\"ACSZ\","
-      "\"state_name_type\":\"oblast\","
-      "\"zipex\":\"15432,01055,01001\","
-      "\"posturl\":\"http://services.ukrposhta.com/postindex_new/\","
-      "\"languages\":\"uk\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C%n%S%n%Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("state_name_type":"oblast",)"
+      u8R"("zipex":"15432,01055,01001",)"
+      u8R"("posturl":"http://services.ukrposhta.com/postindex_new/",)"
+      u8R"("languages":"uk")"
       "}"));
   region_data.insert(std::make_pair("UG", "{"
-      "\"languages\":\"sw~en\""
+      u8R"("languages":"sw~en")"
       "}"));
   region_data.insert(std::make_pair("UM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACS\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"96898\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACS",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"96898",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("US", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C, %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"95014,22162-1010\","
-      "\"posturl\":\"https://tools.usps.com/go/ZipLookupAction!input.action\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C, %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"95014,22162-1010",)"
+      u8R"("posturl":"https://tools.usps.com/go/ZipLookupAction!input.action",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("UY", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C %S\","
-      "\"zipex\":\"11600\","
-      "\"posturl\":\"http://www.correo.com.uy/index.asp\?codPag=codPost&switchMapa=codPost\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C %S",)"
+      u8R"("zipex":"11600",)"
+      u8R"("posturl":"http://www.correo.com.uy/index.asp?codPag=codPost&switchMapa=codPost",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("UZ", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C%n%S\","
-      "\"zipex\":\"702100,700000\","
-      "\"posturl\":\"http://www.pochta.uz/ru/uslugi/indexsearch.html\","
-      "\"languages\":\"uz~uz-Cyrl\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C%n%S",)"
+      u8R"("zipex":"702100,700000",)"
+      u8R"("posturl":"http://www.pochta.uz/ru/uslugi/indexsearch.html",)"
+      u8R"("languages":"uz~uz-Cyrl")"
       "}"));
   region_data.insert(std::make_pair("VA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"00120\","
-      "\"languages\":\"it\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"00120",)"
+      u8R"("languages":"it")"
       "}"));
   region_data.insert(std::make_pair("VC", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z\","
-      "\"zipex\":\"VC0100,VC0110,VC0400\","
-      "\"posturl\":\"http://www.svgpost.gov.vc/\?option=com_content&view=article&id=3&Itemid=16\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z",)"
+      u8R"("zipex":"VC0100,VC0110,VC0400",)"
+      u8R"("posturl":"http://www.svgpost.gov.vc/?option=com_content&view=article&id=3&Itemid=16",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("VE", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %Z, %S\","
-      "\"require\":\"ACS\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"1010,3001,8011,1020\","
-      "\"posturl\":\"http://www.ipostel.gob.ve/index.php/oficinas-postales\","
-      "\"languages\":\"es\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %Z, %S",)"
+      u8R"("require":"ACS",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"1010,3001,8011,1020",)"
+      u8R"("posturl":"http://www.ipostel.gob.ve/index.php/oficinas-postales",)"
+      u8R"("languages":"es")"
       "}"));
   region_data.insert(std::make_pair("VG", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%Z\","
-      "\"require\":\"A\","
-      "\"zipex\":\"VG1110,VG1150,VG1160\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%Z",)"
+      u8R"("require":"A",)"
+      u8R"("zipex":"VG1110,VG1150,VG1160",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("VI", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C %S %Z\","
-      "\"require\":\"ACSZ\","
-      "\"zip_name_type\":\"zip\","
-      "\"state_name_type\":\"state\","
-      "\"zipex\":\"00802-1222,00850-9802\","
-      "\"posturl\":\"http://zip4.usps.com/zip4/welcome.jsp\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%C %S %Z",)"
+      u8R"("require":"ACSZ",)"
+      u8R"("zip_name_type":"zip",)"
+      u8R"("state_name_type":"state",)"
+      u8R"("zipex":"00802-1222,00850-9802",)"
+      u8R"("posturl":"http://zip4.usps.com/zip4/welcome.jsp",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("VN", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C%n%S %Z\","
-      "\"lfmt\":\"%N%n%O%n%A%n%C%n%S %Z\","
-      "\"zipex\":\"119415,136065,720344\","
-      "\"posturl\":\"http://postcode.vnpost.vn/services/search.aspx\","
-      "\"languages\":\"vi\""
+      u8R"("fmt":"%N%n%O%n%A%n%C%n%S %Z",)"
+      u8R"("lfmt":"%N%n%O%n%A%n%C%n%S %Z",)"
+      u8R"("zipex":"119415,136065,720344",)"
+      u8R"("posturl":"http://postcode.vnpost.vn/services/search.aspx",)"
+      u8R"("languages":"vi")"
       "}"));
   region_data.insert(std::make_pair("VU", "{"
-      "\"languages\":\"bi~en~fr\""
+      u8R"("languages":"bi~en~fr")"
       "}"));
   region_data.insert(std::make_pair("WF", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"98600\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"98600",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("WS", "{"
-      "\"languages\":\"sm~en\""
+      u8R"("languages":"sm~en")"
       "}"));
   region_data.insert(std::make_pair("XK", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"10000\","
-      "\"languages\":\"sq~sr~sr-Latn\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"10000",)"
+      u8R"("languages":"sq~sr~sr-Latn")"
       "}"));
   region_data.insert(std::make_pair("YE", "{"
-      "\"languages\":\"ar\""
+      u8R"("languages":"ar")"
       "}"));
   region_data.insert(std::make_pair("YT", "{"
-      "\"fmt\":\"%O%n%N%n%A%n%Z %C %X\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"97600\","
-      "\"languages\":\"fr\""
+      u8R"("fmt":"%O%n%N%n%A%n%Z %C %X",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"97600",)"
+      u8R"("languages":"fr")"
       "}"));
   region_data.insert(std::make_pair("ZA", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%D%n%C%n%Z\","
-      "\"require\":\"ACZ\","
-      "\"zipex\":\"0083,1451,0001\","
-      "\"posturl\":\"https://www.postoffice.co.za/contactus/postalcode.html\","
-      "\"languages\":\"en~zu~xh~af~nso~tn~st~ts~ss~ve~nr\""
+      u8R"("fmt":"%N%n%O%n%A%n%D%n%C%n%Z",)"
+      u8R"("require":"ACZ",)"
+      u8R"("zipex":"0083,1451,0001",)"
+      u8R"("posturl":"https://www.postoffice.co.za/contactus/postalcode.html",)"
+      u8R"("languages":"en~zu~xh~af~nso~tn~st~ts~ss~ve~nr")"
       "}"));
   region_data.insert(std::make_pair("ZM", "{"
-      "\"fmt\":\"%N%n%O%n%A%n%Z %C\","
-      "\"zipex\":\"50100,50101\","
-      "\"languages\":\"en\""
+      u8R"("fmt":"%N%n%O%n%A%n%Z %C",)"
+      u8R"("zipex":"50100,50101",)"
+      u8R"("languages":"en")"
       "}"));
   region_data.insert(std::make_pair("ZW", "{"
-      "\"languages\":\"sn~en~nd\""
+      u8R"("languages":"sn~en~nd")"
       "}"));
   return region_data;
 }
@@ -1422,12 +1422,12 @@
 const std::string& RegionDataConstants::GetDefaultRegionData() {
   static const std::string kDefaultRegionData(
       "{"
-      "\"fmt\":\"%N%n%O%n%A%n%C\","
-      "\"require\":\"AC\","
-      "\"zip_name_type\":\"postal\","
-      "\"state_name_type\":\"province\","
-      "\"locality_name_type\":\"city\","
-      "\"sublocality_name_type\":\"suburb\""
+      u8R"("fmt":"%N%n%O%n%A%n%C",)"
+      u8R"("require":"AC",)"
+      u8R"("zip_name_type":"postal",)"
+      u8R"("state_name_type":"province",)"
+      u8R"("locality_name_type":"city",)"
+      u8R"("sublocality_name_type":"suburb")"
       "}");
   return kDefaultRegionData;
 }
diff --git a/cpp/src/rule.cc b/cpp/src/rule.cc
index 0d9a02d..5ee1d09 100644
--- a/cpp/src/rule.cc
+++ b/cpp/src/rule.cc
@@ -160,7 +160,7 @@
 // in regular expressions - (, [, \, {, ?. These special characters are all the
 // ones that appear in the postal code regular expressions.
 bool ContainsRegExSpecialCharacters(const std::string& input) {
-  return input.find_first_of("([\\{?") != std::string::npos;
+  return input.find_first_of(R"(([\{?)") != std::string::npos;
 }
 
 }  // namespace
diff --git a/cpp/src/validating_storage.h b/cpp/src/validating_storage.h
index f1e22f1..c4d24f3 100644
--- a/cpp/src/validating_storage.h
+++ b/cpp/src/validating_storage.h
@@ -41,17 +41,17 @@
 
   // Takes ownership of |storage|.
   explicit ValidatingStorage(Storage* storage);
-  virtual ~ValidatingStorage();
+  ~ValidatingStorage() override;
 
   // Storage implementation.
-  virtual void Put(const std::string& key, std::string* data);
+  void Put(const std::string& key, std::string* data) override;
 
   // Storage implementation.
   // If the data is invalid, then |data_ready| will be called with (false, key,
   // empty-string). If the data is valid, but stale, then |data_ready| will be
   // called with (false, key, stale-data). If the data is valid and fresh, then
   // |data_ready| will be called with (true, key, fresh-data).
-  virtual void Get(const std::string& key, const Callback& data_ready) const;
+  void Get(const std::string& key, const Callback& data_ready) const override;
 
  private:
   // The storage being wrapped.
diff --git a/cpp/src/validation_task.cc b/cpp/src/validation_task.cc
index 9f0911a..9bdff45 100644
--- a/cpp/src/validation_task.cc
+++ b/cpp/src/validation_task.cc
@@ -66,7 +66,7 @@
   assert(supplier != nullptr);
   problems_->clear();
   lookup_key_->FromAddress(address_);
-  supplier->Supply(*lookup_key_, *supplied_);
+  supplier->SupplyGlobally(*lookup_key_, *supplied_);
 }
 
 void ValidationTask::Validate(bool success,
diff --git a/cpp/test/address_field_util_test.cc b/cpp/test/address_field_util_test.cc
index 0cde367..f545df4 100644
--- a/cpp/test/address_field_util_test.cc
+++ b/cpp/test/address_field_util_test.cc
@@ -38,7 +38,7 @@
 
 TEST(AddressFieldUtilTest, FormatParseNewline) {
   std::vector<FormatElement> actual;
-  ParseFormatRule("%O%n%N%n%A%nAX-%Z %C%n\xC3\x85LAND", &actual);  /* "ÅLAND" */
+  ParseFormatRule(u8"%O%n%N%n%A%nAX-%Z %C%nÅLAND", &actual);
 
   std::vector<FormatElement> expected;
   expected.push_back(FormatElement(ORGANIZATION));
@@ -52,7 +52,7 @@
   expected.push_back(FormatElement(" "));
   expected.push_back(FormatElement(LOCALITY));
   expected.push_back(FormatElement());
-  expected.push_back(FormatElement("\xC3\x85LAND"));  /* "ÅLAND" */
+  expected.push_back(FormatElement(u8"ÅLAND"));
 
   EXPECT_EQ(expected, actual);
 }
diff --git a/cpp/test/address_formatter_test.cc b/cpp/test/address_formatter_test.cc
index c656ec8..fe6092a 100644
--- a/cpp/test/address_formatter_test.cc
+++ b/cpp/test/address_formatter_test.cc
@@ -80,7 +80,7 @@
 
   address.language_code = "ar";
   GetStreetAddressLinesAsSingleLine(address, &result);
-  EXPECT_EQ("Line 1\xD8\x8C" " Line 2", result);  // Arabic comma.
+  EXPECT_EQ(u8"Line 1، Line 2", result);
 }
 
 TEST(AddressFormatterTest, GetStreetAddressLinesAsSingleLine_5Lines) {
@@ -129,13 +129,9 @@
 }
 
 TEST(AddressFormatterTest, GetFormattedNationalAddressLatinFormat) {
-  /* 大安區 */
-  static const char kTaiwanCity[] = "\xE5\xA4\xA7\xE5\xAE\x89\xE5\x8D\x80";
-  /* 台北市 */
-  static const char kTaiwanAdmin[] = "\xE5\x8F\xB0\xE5\x8C\x97\xE5\xB8\x82";
-  /* 台灣信義路三段33號 */
-  static const char kTaiwanStreetLine[]= "\xE5\x8F\xB0\xE7\x81\xA3\xE4\xBF\xA1"
-    "\xE7\xBE\xA9\xE8\xB7\xAF\xE4\xB8\x89\xE6\xAE\xB5" "33" "\xE8\x99\x9F";
+  static const char kTaiwanCity[] = u8"大安區";
+  static const char kTaiwanAdmin[] = u8"台北市";
+  static const char kTaiwanStreetLine[] = u8"台灣信義路三段33號";
   static const char kPostalCode[] = "106";
 
   AddressData address;
@@ -286,7 +282,7 @@
   AddressData address;
   address.region_code = "AX";
   std::vector<std::string> expected;
-  expected.push_back("\xC3\x85LAND");  /* ÅLAND */
+  expected.push_back(u8"ÅLAND");
   std::vector<std::string> lines;
   GetFormattedNationalAddress(address, &lines);
   EXPECT_EQ(expected, lines);
@@ -313,7 +309,7 @@
   EXPECT_EQ(expected, lines);
 
   address.postal_code = "123";
-  expected.push_back("\xE3\x80\x92" "123");  /* 〒123 */
+  expected.push_back(u8"〒123");
   GetFormattedNationalAddress(address, &lines);
   EXPECT_EQ(expected, lines);
 
diff --git a/cpp/test/address_input_helper_test.cc b/cpp/test/address_input_helper_test.cc
index 614047f..e8e4fef 100644
--- a/cpp/test/address_input_helper_test.cc
+++ b/cpp/test/address_input_helper_test.cc
@@ -107,11 +107,11 @@
   address.region_code = "TW";
   address.postal_code = "53012";
 
-  /* This matches 二水鄉 - Ershuei Township. */
+  // This matches 二水鄉 - Ershuei Township.
   AddressData expected = address;
-  /* This locality is in 彰化縣 - Changhua County. */
-  expected.administrative_area = "\xE5\xBD\xB0\xE5\x8C\x96\xE7\xB8\xA3";
-  expected.locality = "\xE4\xBA\x8C\xE6\xB0\xB4\xE9\x84\x89";
+  // This locality is in 彰化縣 - Changhua County.
+  expected.administrative_area = u8"彰化縣";
+  expected.locality = u8"二水鄉";
   FillAddress(&address);
   EXPECT_EQ(expected, address);
 
@@ -130,9 +130,9 @@
   address.postal_code = "53012";
   address.language_code = "zh-Latn";
 
-  /* This matches 二水鄉 - Ershuei Township. */
+  // This matches 二水鄉 - Ershuei Township.
   AddressData expected = address;
-  /* This locality is in 彰化縣 - Changhua County. */
+  // This locality is in 彰化縣 - Changhua County.
   expected.locality = "Ershuei Township";
   expected.administrative_area = "Changhua County";
   FillAddress(&address);
@@ -154,12 +154,12 @@
   address.postal_code = "425-111";
 
   AddressData expected = address;
-  /* The province is Gyeonggi - 경기도. */
-  expected.administrative_area = "\xEA\xB2\xBD\xEA\xB8\xB0\xEB\x8F\x84";
-  /* The city is Ansan-si - 안산시. */
-  expected.locality = "\xEC\x95\x88\xEC\x82\xB0\xEC\x8B\x9C";
-  /* The district is Danwon-gu - 단원구 */
-  expected.dependent_locality = "\xEB\x8B\xA8\xEC\x9B\x90\xEA\xB5\xAC";
+  // The province is Gyeonggi - 경기도.
+  expected.administrative_area = u8"경기도";
+  // The city is Ansan-si - 안산시.
+  expected.locality = u8"안산시";
+  // The district is Danwon-gu - 단원구
+  expected.dependent_locality = u8"단원구";
 
   FillAddress(&address);
   EXPECT_EQ(expected, address);
@@ -170,11 +170,11 @@
   address_ko_latn.language_code = "ko-latn";
 
   expected = address_ko_latn;
-  /* The province is Gyeonggi - 경기도. */
+  // The province is Gyeonggi - 경기도.
   expected.administrative_area = "Gyeonggi";
-  /* The city is Ansan-si - 안산시. */
+  // The city is Ansan-si - 안산시.
   expected.locality = "Ansan-si";
-  /* The district is Danwon-gu - 단원구 */
+  // The district is Danwon-gu - 단원구
   expected.dependent_locality = "Danwon-gu";
 
   FillAddress(&address_ko_latn);
@@ -188,10 +188,9 @@
   address.postal_code = "527-111";
 
   AddressData expected = address;
-  /* The province, Jeonnam - 전라남도 - is known, but we have several locality
-   * matches so none of them are populated. */
-  expected.administrative_area =
-      "\xEC\xA0\x84\xEB\x9D\xBC\xEB\x82\xA8\xEB\x8F\x84";
+  // The province, Jeonnam - 전라남도 - is known, but we have several locality
+  // matches so none of them are populated.
+  expected.administrative_area = u8"전라남도";
   FillAddress(&address);
   EXPECT_EQ(expected, address);
 }
@@ -295,18 +294,18 @@
       // We use KR since we need a country where we format all fields down to
       // dependent locality, or the hierarchy won't be loaded.
       "data/KR",
-      "{\"data/KR\": "
+      R"({"data/KR": )"
       // The top-level ZIP expression must be present for sub-key matches to be
       // evaluated.
-      "{\"id\":\"data/KR\", \"sub_keys\":\"A~B\", \"zip\":\"\\\\d{5}\"}, "
-      "\"data/KR/A\": "
-      "{\"id\":\"data/KR/A\", \"sub_keys\":\"A1\"}, "
-      "\"data/KR/A/A1\": "
-      "{\"id\":\"data/KR/A/A1\", \"zip\":\"1\"}, "
-      "\"data/KR/B\": "
-      "{\"id\":\"data/KR/B\", \"sub_keys\":\"B1\"}, "
-      "\"data/KR/B/B1\": "
-      "{\"id\":\"data/KR/B/B1\", \"zip\":\"12\"}}"));
+      R"({"id":"data/KR", "sub_keys":"A~B", "zip":"\\d{5}"}, )"
+      R"("data/KR/A": )"
+      R"({"id":"data/KR/A", "sub_keys":"A1"}, )"
+      R"("data/KR/A/A1": )"
+      R"({"id":"data/KR/A/A1", "zip":"1"}, )"
+      R"("data/KR/B": )"
+      R"({"id":"data/KR/B", "sub_keys":"B1"}, )"
+      R"("data/KR/B/B1": )"
+      R"({"id":"data/KR/B/B1", "zip":"12"}})"));
 
   AddressData address;
   address.region_code = "KR";
@@ -329,25 +328,25 @@
       // We use KR since we need a country where we format all fields down to
       // dependent locality, or the hierarchy won't be loaded.
       "data/KR",
-      "{\"data/KR\": "
+      R"({"data/KR": )"
       // The top-level ZIP expression must be present for sub-key matches to be
       // evaluated.
-      "{\"id\":\"data/KR\", \"sub_keys\":\"A~B\", \"zip\":\"\\\\d{5}\"}, "
-      "\"data/KR/A\": "
-      "{\"id\":\"data/KR/A\", \"sub_keys\":\"A1~A2\"}, "
-      "\"data/KR/A/A1\": "
-      "{\"id\":\"data/KR/A/A1\", \"sub_keys\":\"A1a\", \"zip\":\"1\"}, "
+      R"({"id":"data/KR", "sub_keys":"A~B", "zip":"\\d{5}"}, )"
+      R"("data/KR/A": )"
+      R"({"id":"data/KR/A", "sub_keys":"A1~A2"}, )"
+      R"("data/KR/A/A1": )"
+      R"({"id":"data/KR/A/A1", "sub_keys":"A1a", "zip":"1"}, )"
       // This key matches the ZIP code.
-      "\"data/KR/A/A1/A1a\": "
-      "{\"id\":\"data/KR/A/A1/A1a\", \"zip\":\"12\"}, "
-      "\"data/KR/A/A2\": "
-      "{\"id\":\"data/KR/A/A2\", \"sub_keys\":\"A2a\", \"zip\":\"1\"}, "
+      R"("data/KR/A/A1/A1a": )"
+      R"({"id":"data/KR/A/A1/A1a", "zip":"12"}, )"
+      R"("data/KR/A/A2": )"
+      R"({"id":"data/KR/A/A2", "sub_keys":"A2a", "zip":"1"}, )"
       // This key, also in state A, but in city A2, matches the ZIP code.
-      "\"data/KR/A/A2/A2a\": "
-      "{\"id\":\"data/KR/A/A2/A2a\", \"zip\":\"123\"}, "
+      R"("data/KR/A/A2/A2a": )"
+      R"({"id":"data/KR/A/A2/A2a", "zip":"123"}, )"
       // This key, in state B, does not match the ZIP code.
-      "\"data/KR/B\": "
-      "{\"id\":\"data/KR/B\", \"zip\":\"2\"}}"));
+      R"("data/KR/B": )"
+      R"({"id":"data/KR/B", "zip":"2"}})"));
 
   AddressData address;
   address.region_code = "KR";
diff --git a/cpp/test/address_normalizer_test.cc b/cpp/test/address_normalizer_test.cc
index 2794b0f..d678e06 100644
--- a/cpp/test/address_normalizer_test.cc
+++ b/cpp/test/address_normalizer_test.cc
@@ -150,11 +150,9 @@
   AddressData address;
   address.language_code = "ko-KR";
   address.region_code = "KR";
-  address.administrative_area = "\xEA\xB0\x95\xEC\x9B\x90";  /* "강원" */
+  address.administrative_area = u8"강원";
   normalizer_.Normalize(&address);
-  EXPECT_EQ(
-      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-      address.administrative_area);
+  EXPECT_EQ(u8"강원도", address.administrative_area);
 }
 
 TEST_F(AddressNormalizerTest, DontSwitchLatinScriptForUnknownLanguage) {
@@ -170,11 +168,9 @@
   supplier_.LoadRules("KR", *loaded_);
   AddressData address;
   address.region_code = "KR";
-  address.administrative_area = "\xEA\xB0\x95\xEC\x9B\x90";  /* "강원" */
+  address.administrative_area = u8"강원";
   normalizer_.Normalize(&address);
-  EXPECT_EQ(
-      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-      address.administrative_area);
+  EXPECT_EQ(u8"강원도", address.administrative_area);
 }
 
 }  // namespace
diff --git a/cpp/test/address_ui_test.cc b/cpp/test/address_ui_test.cc
index d609e88..1f7d080 100644
--- a/cpp/test/address_ui_test.cc
+++ b/cpp/test/address_ui_test.cc
@@ -150,7 +150,8 @@
     : public testing::TestWithParam<LanguageTestCase> {
  public:
   BestAddressLanguageTagTest(const BestAddressLanguageTagTest&) = delete;
-  BestAddressLanguageTagTest& operator=(const BestAddressLanguageTagTest&) = delete;
+  BestAddressLanguageTagTest& operator=(const BestAddressLanguageTagTest&) =
+      delete;
 
  protected:
   BestAddressLanguageTagTest() {}
diff --git a/cpp/test/address_validator_test.cc b/cpp/test/address_validator_test.cc
index 466e3c8..b19b6e4 100644
--- a/cpp/test/address_validator_test.cc
+++ b/cpp/test/address_validator_test.cc
@@ -71,12 +71,10 @@
 
   static ValidatorWrapper* Build() { return new OndemandValidatorWrapper; }
 
-  virtual void Validate(const AddressData& address,
-                        bool allow_postal,
-                        bool require_name,
-                        const FieldProblemMap* filter,
-                        FieldProblemMap* problems,
-                        const AddressValidator::Callback& validated) {
+  void Validate(const AddressData& address, bool allow_postal,
+                bool require_name, const FieldProblemMap* filter,
+                FieldProblemMap* problems,
+                const AddressValidator::Callback& validated) override {
     validator_.Validate(
         address,
         allow_postal,
@@ -102,12 +100,10 @@
 
   static ValidatorWrapper* Build() { return new PreloadValidatorWrapper; }
 
-  virtual void Validate(const AddressData& address,
-                        bool allow_postal,
-                        bool require_name,
-                        const FieldProblemMap* filter,
-                        FieldProblemMap* problems,
-                        const AddressValidator::Callback& validated) {
+  void Validate(const AddressData& address, bool allow_postal,
+                bool require_name, const FieldProblemMap* filter,
+                FieldProblemMap* problems,
+                const AddressValidator::Callback& validated) override {
     const std::string& region_code = address.region_code;
     if (!region_code.empty() && !supplier_.IsLoaded(region_code)) {
       supplier_.LoadRules(region_code, *loaded_);
@@ -239,7 +235,7 @@
 
 TEST_P(AddressValidatorTest, ValidAddressCH) {
   address_.region_code = "CH";
-  address_.locality = "ZH";  /* Zürich */
+  address_.locality = "ZH";  // Zürich
   address_.postal_code = "8002";
   address_.address_line.push_back("Brandschenkestrasse 110");
   address_.language_code = "de";
@@ -267,9 +263,7 @@
   address_.locality = "Villahermosa";
   address_.administrative_area = "TAB";  // Tabasco
   address_.postal_code = "86070";
-  address_.address_line.push_back(
-      /* Av Gregorio Méndez Magaña 1400 */
-      "Av Gregorio M\xC3\xA9ndez Maga\xC3\xB1""a 1400");
+  address_.address_line.push_back(u8"Av Gregorio Méndez Magaña 1400");
   address_.language_code = "es";
 
   ASSERT_NO_FATAL_FAILURE(Validate());
@@ -282,9 +276,7 @@
   address_.locality = "Villahermosa";
   address_.administrative_area = "TAB";  // Tabasco
   address_.postal_code = "80000";
-  address_.address_line.push_back(
-      /* Av Gregorio Méndez Magaña 1400 */
-      "Av Gregorio M\xC3\xA9ndez Maga\xC3\xB1""a 1400");
+  address_.address_line.push_back(u8"Av Gregorio Méndez Magaña 1400");
   address_.language_code = "es";
 
   expected_.insert(std::make_pair(POSTAL_CODE, MISMATCHING_VALUE));
@@ -309,7 +301,7 @@
 
 TEST_P(AddressValidatorTest, ValidateClearsProblems) {
   address_.region_code = "CH";
-  address_.locality = "ZH";  /* Zürich */
+  address_.locality = "ZH";  // Zürich
   address_.postal_code = "123";
   address_.address_line.push_back("Brandschenkestrasse 110");
   address_.language_code = "de";
@@ -327,10 +319,8 @@
 
 TEST_P(AddressValidatorTest, ValidKanjiAddressJP) {
   address_.region_code = "JP";
-  address_.administrative_area =
-      "\xE5\xBE\xB3\xE5\xB3\xB6\xE7\x9C\x8C"; /* 徳島県 */
-  address_.locality =
-      "\xE5\xBE\xB3\xE5\xB3\xB6\xE5\xB8\x82";  /* 徳島市 */
+  address_.administrative_area = u8"徳島県";
+  address_.locality = u8"徳島市";
   address_.postal_code = "770-0847";
   address_.address_line.push_back("...");
   address_.language_code = "ja";
@@ -363,7 +353,7 @@
   if (GetParam() == &OndemandValidatorWrapper::Build) return;
 
   address_.region_code = "BR";
-  address_.administrative_area = "S\xC3\xA3o Paulo";  /* São Paulo */
+  address_.administrative_area = u8"São Paulo";
   address_.locality = "Presidente Prudente";
   address_.postal_code = "19063-008";
   address_.address_line.push_back("Rodovia Raposo Tavares, 6388-6682");
@@ -398,7 +388,7 @@
 
   address_.region_code = "CA";
   address_.administrative_area = "Nouveau-Brunswick";
-  address_.locality = "Comt\xC3\xA9 de Saint-Jean";  /* Comté de Saint-Jean */
+  address_.locality = u8"Comté de Saint-Jean";
   address_.postal_code = "E2L 4Z6";
   address_.address_line.push_back("...");
   address_.language_code = "fr";
diff --git a/cpp/test/fake_storage.h b/cpp/test/fake_storage.h
index bd30438..605b72a 100644
--- a/cpp/test/fake_storage.h
+++ b/cpp/test/fake_storage.h
@@ -62,11 +62,11 @@
   FakeStorage& operator=(const FakeStorage&) = delete;
 
   FakeStorage();
-  virtual ~FakeStorage();
+  ~FakeStorage() override;
 
   // Storage implementation.
-  virtual void Put(const std::string& key, std::string* data);
-  virtual void Get(const std::string& key, const Callback& data_ready) const;
+  void Put(const std::string& key, std::string* data) override;
+  void Get(const std::string& key, const Callback& data_ready) const override;
 
  private:
   std::map<std::string, std::string*> data_;
diff --git a/cpp/test/mock_source.h b/cpp/test/mock_source.h
index 6d5c8c8..ed503f9 100644
--- a/cpp/test/mock_source.h
+++ b/cpp/test/mock_source.h
@@ -60,10 +60,10 @@
   MockSource& operator=(const MockSource&) = delete;
 
   MockSource();
-  virtual ~MockSource();
+  ~MockSource() override;
 
   // Source implementation.
-  virtual void Get(const std::string& key, const Callback& data_ready) const;
+  void Get(const std::string& key, const Callback& data_ready) const override;
 
   std::map<std::string, std::string> data_;
 };
diff --git a/cpp/test/ondemand_supply_task_test.cc b/cpp/test/ondemand_supply_task_test.cc
index 9a95259..d510960 100644
--- a/cpp/test/ondemand_supply_task_test.cc
+++ b/cpp/test/ondemand_supply_task_test.cc
@@ -61,7 +61,7 @@
         supplied_(BuildCallback(this, &OndemandSupplyTaskTest::Supplied)),
         task_(new OndemandSupplyTask(lookup_key_, &rule_cache_, *supplied_)) {}
 
-  virtual ~OndemandSupplyTaskTest() {
+  ~OndemandSupplyTaskTest() override {
     for (std::map<std::string, const Rule*>::const_iterator
          it = rule_cache_.begin(); it != rule_cache_.end(); ++it) {
       delete it->second;
@@ -114,7 +114,7 @@
 }
 
 TEST_F(OndemandSupplyTaskTest, Valid) {
-  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
+  source_->data_.insert(std::make_pair("data/XA", R"({"id":"data/XA"})"));
 
   Queue("data/XA");
 
@@ -135,13 +135,13 @@
 
 TEST_F(OndemandSupplyTaskTest, ValidHierarchy) {
   source_->data_.insert(
-      std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
+      std::make_pair("data/XA", R"({"id":"data/XA"})"));
   source_->data_.insert(
-      std::make_pair("data/XA/aa", "{\"id\":\"data/XA/aa\"}"));
+      std::make_pair("data/XA/aa", R"({"id":"data/XA/aa"})"));
   source_->data_.insert(
-      std::make_pair("data/XA/aa/bb", "{\"id\":\"data/XA/aa/bb\"}"));
+      std::make_pair("data/XA/aa/bb", R"({"id":"data/XA/aa/bb"})"));
   source_->data_.insert(
-      std::make_pair("data/XA/aa/bb/cc", "{\"id\":\"data/XA/aa/bb/cc\"}"));
+      std::make_pair("data/XA/aa/bb/cc", R"({"id":"data/XA/aa/bb/cc"})"));
 
   Queue("data/XA");
   Queue("data/XA/aa");
@@ -185,7 +185,7 @@
 }
 
 TEST_F(OndemandSupplyTaskTest, InvalidJson2) {
-  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
+  source_->data_.insert(std::make_pair("data/XA", R"({"id":"data/XA"})"));
   source_->data_.insert(std::make_pair("data/XA/aa", ":"));
 
   success_ = false;
@@ -198,7 +198,7 @@
 }
 
 TEST_F(OndemandSupplyTaskTest, EmptyJsonJustMeansServerKnowsNothingAboutKey) {
-  source_->data_.insert(std::make_pair("data/XA", "{\"id\":\"data/XA\"}"));
+  source_->data_.insert(std::make_pair("data/XA", R"({"id":"data/XA"})"));
   source_->data_.insert(std::make_pair("data/XA/aa", "{}"));
 
   Queue("data/XA");
@@ -215,8 +215,7 @@
 }
 
 TEST_F(OndemandSupplyTaskTest, IfCountryFailsAllFails) {
-  source_->data_.insert(
-      std::make_pair("data/XA/aa", "{\"id\":\"data/XA/aa\"}"));
+  source_->data_.insert(std::make_pair("data/XA/aa", R"({"id":"data/XA/aa"})"));
 
   success_ = false;
 
diff --git a/cpp/test/preload_supplier_test.cc b/cpp/test/preload_supplier_test.cc
index 1747bdf..bef399e 100644
--- a/cpp/test/preload_supplier_test.cc
+++ b/cpp/test/preload_supplier_test.cc
@@ -36,6 +36,7 @@
 using i18n::addressinput::NullStorage;
 using i18n::addressinput::PreloadSupplier;
 using i18n::addressinput::Rule;
+using i18n::addressinput::Supplier;
 using i18n::addressinput::TestdataSource;
 
 class PreloadSupplierTest : public testing::Test {
@@ -46,10 +47,14 @@
  protected:
   PreloadSupplierTest()
       : supplier_(new TestdataSource(true), new NullStorage),
-        loaded_callback_(BuildCallback(this, &PreloadSupplierTest::OnLoaded)) {}
+        loaded_callback_(BuildCallback(this, &PreloadSupplierTest::OnLoaded)),
+        supplied_callback_(
+            BuildCallback(this, &PreloadSupplierTest::OnSupplied)) {}
 
   PreloadSupplier supplier_;
   const std::unique_ptr<const PreloadSupplier::Callback> loaded_callback_;
+  const std::unique_ptr<const Supplier::Callback> supplied_callback_;
+  bool state_rule_found_, city_rule_found_, neighbourhood_rule_found_;
 
  private:
   void OnLoaded(bool success, const std::string& region_code, int num_rules) {
@@ -58,6 +63,16 @@
     ASSERT_LT(0, num_rules);
     ASSERT_TRUE(supplier_.IsLoaded(region_code));
   }
+
+  void OnSupplied(bool success, const LookupKey& lookup_key,
+                  const Supplier::RuleHierarchy& hierarchy) {
+    EXPECT_TRUE(success);
+
+    EXPECT_TRUE(hierarchy.rule[0] != nullptr);  // Country rule is never null.
+    EXPECT_EQ(hierarchy.rule[1] != nullptr, state_rule_found_);
+    EXPECT_EQ(hierarchy.rule[2] != nullptr, city_rule_found_);
+    EXPECT_EQ(hierarchy.rule[3] != nullptr, neighbourhood_rule_found_);
+  }
 };
 
 TEST_F(PreloadSupplierTest, GetUsRule) {
@@ -83,6 +98,18 @@
   EXPECT_EQ("data/US/CA", rule->GetId());
 }
 
+TEST_F(PreloadSupplierTest, GetUsCaliforniaRule) {
+  supplier_.LoadRules("US", *loaded_callback_);
+  LookupKey ca_key;
+  AddressData ca_address;
+  ca_address.region_code = "US";
+  ca_address.administrative_area = "California";
+  ca_key.FromAddress(ca_address);
+  const Rule* rule = supplier_.GetRule(ca_key);
+  ASSERT_TRUE(rule != nullptr);
+  EXPECT_EQ("data/US/CA", rule->GetId());
+}
+
 TEST_F(PreloadSupplierTest, GetZwRule) {
   supplier_.LoadRules("ZW", *loaded_callback_);
   LookupKey zw_key;
@@ -125,4 +152,107 @@
   EXPECT_LT(1U, rules.size());
 }
 
+TEST_F(PreloadSupplierTest, SupplyRegionCode) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "NB";
+  key.FromAddress(address);
+
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.Supply(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyGloballyRegionCode) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "NB";
+  key.FromAddress(address);
+
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.SupplyGlobally(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyRegionName) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "New Brunswick";
+  key.FromAddress(address);
+
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.Supply(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyGloballyRegionName) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "New Brunswick";
+  key.FromAddress(address);
+
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.SupplyGlobally(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyRegionNameLanguage) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "Nouveau-Brunswick";
+  key.FromAddress(address);
+
+  // If the language is not set, supply only looks for the region name in the
+  // default language.
+  state_rule_found_ = false;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.Supply(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyRegionNameLanguageSet) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "Nouveau-Brunswick";
+  address.language_code = "fr";
+  key.FromAddress(address);
+
+  // If the language is set, supply will look for the names in that language.
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.Supply(key, *supplied_callback_);
+}
+
+TEST_F(PreloadSupplierTest, SupplyGloballyRegionNameLanguage) {
+  supplier_.LoadRules("CA", *loaded_callback_);
+  LookupKey key;
+  AddressData address;
+  address.region_code = "CA";
+  address.administrative_area = "Nouveau-Brunswick";
+  key.FromAddress(address);
+
+  // SupplyGlobally looks for the region name in all available languages.
+  state_rule_found_ = true;
+  city_rule_found_ = false;
+  neighbourhood_rule_found_ = false;
+  supplier_.SupplyGlobally(key, *supplied_callback_);
+}
+
 }  // namespace
diff --git a/cpp/test/region_data_builder_test.cc b/cpp/test/region_data_builder_test.cc
index 20fea47..4b63a94 100644
--- a/cpp/test/region_data_builder_test.cc
+++ b/cpp/test/region_data_builder_test.cc
@@ -105,9 +105,7 @@
   const RegionData& tree = builder_.Build("KR", "ko-Latn", &best_language_);
   EXPECT_EQ("ko-Latn", best_language_);
   ASSERT_FALSE(tree.sub_regions().empty());
-  EXPECT_EQ(
-      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-      tree.sub_regions().front()->key());
+  EXPECT_EQ(u8"강원도", tree.sub_regions().front()->key());
   EXPECT_EQ("Gangwon", tree.sub_regions().front()->name());
 }
 
@@ -116,12 +114,8 @@
   const RegionData& tree = builder_.Build("KR", "ko-KR", &best_language_);
   EXPECT_EQ("ko", best_language_);
   ASSERT_FALSE(tree.sub_regions().empty());
-  EXPECT_EQ(
-      "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-      tree.sub_regions().front()->key());
-  EXPECT_EQ(
-      "\xEA\xB0\x95\xEC\x9B\x90",  /* "강원" */
-      tree.sub_regions().front()->name());
+  EXPECT_EQ(u8"강원도", tree.sub_regions().front()->key());
+  EXPECT_EQ(u8"강원", tree.sub_regions().front()->name());
 }
 
 }  // namespace
diff --git a/cpp/test/retriever_test.cc b/cpp/test/retriever_test.cc
index be8688a..66f1f1e 100644
--- a/cpp/test/retriever_test.cc
+++ b/cpp/test/retriever_test.cc
@@ -130,14 +130,14 @@
   StaleStorage& operator=(const StaleStorage&) = delete;
 
   StaleStorage() : data_updated_(false) {}
-  virtual ~StaleStorage() {}
+  ~StaleStorage() override {}
 
   // Storage implementation.
-  virtual void Get(const std::string& key, const Callback& data_ready) const {
+  void Get(const std::string& key, const Callback& data_ready) const override {
     data_ready(true, key, new std::string(kStaleWrappedData));
   }
 
-  virtual void Put(const std::string& key, std::string* value) {
+  void Put(const std::string& key, std::string* value) override {
     ASSERT_TRUE(value != nullptr);
     data_updated_ = true;
     delete value;
diff --git a/cpp/test/rule_test.cc b/cpp/test/rule_test.cc
index 5982935..0f5c2e1 100644
--- a/cpp/test/rule_test.cc
+++ b/cpp/test/rule_test.cc
@@ -46,23 +46,23 @@
 TEST(RuleTest, CopyOverwritesRule) {
   Rule rule;
   ASSERT_TRUE(rule.ParseSerializedRule(
-      "{"
-      "\"fmt\":\"%S%Z\","
-      "\"lfmt\":\"%Z%S\","
-      "\"id\":\"data/XA\","
-      "\"name\":\"Le Test\","
-      "\"lname\":\"Testistan\","
-      "\"require\":\"AC\","
-      "\"sub_keys\":\"aa~bb~cc\","
-      "\"languages\":\"en~fr\","
-      "\"zip\":\"\\\\d{3}\","
-      "\"state_name_type\":\"area\","
-      "\"locality_name_type\":\"post_town\","
-      "\"sublocality_name_type\":\"neighborhood\","
-      "\"zip_name_type\":\"postal\","
-      "\"zipex\":\"1234\","
-      "\"posturl\":\"http://www.testpost.com\""
-      "}"));
+      R"({)"
+      R"("fmt":"%S%Z",)"
+      R"("lfmt":"%Z%S",)"
+      R"("id":"data/XA",)"
+      R"("name":"Le Test",)"
+      R"("lname":"Testistan",)"
+      R"("require":"AC",)"
+      R"("sub_keys":"aa~bb~cc",)"
+      R"("languages":"en~fr",)"
+      R"("zip":"\\d{3}",)"
+      R"("state_name_type":"area",)"
+      R"("locality_name_type":"post_town",)"
+      R"("sublocality_name_type":"neighborhood",)"
+      R"("zip_name_type":"postal",)"
+      R"("zipex":"1234",)"
+      R"("posturl":"http://www.testpost.com")"
+      R"(})"));
 
   Rule copy;
   EXPECT_NE(rule.GetFormat(), copy.GetFormat());
@@ -220,19 +220,19 @@
 
 TEST(RuleTest, PostalCodeMatcher) {
   Rule rule;
-  ASSERT_TRUE(rule.ParseSerializedRule("{\"zip\":\"\\\\d{3}\"}"));
+  ASSERT_TRUE(rule.ParseSerializedRule(R"({"zip":"\\d{3}"})"));
   EXPECT_TRUE(rule.GetPostalCodeMatcher() != nullptr);
 }
 
 TEST(RuleTest, PostalCodeMatcherInvalidRegExp) {
   Rule rule;
-  ASSERT_TRUE(rule.ParseSerializedRule("{\"zip\":\"(\"}"));
+  ASSERT_TRUE(rule.ParseSerializedRule(R"({"zip":"("})"));
   EXPECT_TRUE(rule.GetPostalCodeMatcher() == nullptr);
 }
 
 TEST(RuleTest, ParsesJsonRuleCorrectly) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"zip\":\"\\\\d{3}\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"zip":"\\d{3}"})"));
   Rule rule;
   rule.ParseJsonRule(json);
   EXPECT_TRUE(rule.GetPostalCodeMatcher() != nullptr);
@@ -459,7 +459,7 @@
   Rule rule;
   ASSERT_TRUE(rule.ParseSerializedRule("{\"zip\":\"1234\"}"));
   EXPECT_TRUE(rule.GetPostalCodeMatcher() != nullptr);
-  EXPECT_TRUE(rule.GetSolePostalCode() == "1234");
+  EXPECT_EQ(rule.GetSolePostalCode(), "1234");
 
   Rule copy;
   EXPECT_TRUE(copy.GetPostalCodeMatcher() == nullptr);
diff --git a/cpp/test/supplier_test.cc b/cpp/test/supplier_test.cc
index 945882e..39f4355 100644
--- a/cpp/test/supplier_test.cc
+++ b/cpp/test/supplier_test.cc
@@ -34,25 +34,6 @@
 
 namespace {
 
-// For compatibility with legacy compilers, that can't handle UTF-8 string
-// literals in source code (please let them disappear from common use soon),
-// Chinese strings required in the test code are here provided as string
-// constants in hex escaped UTF-8 encoding.
-
-/* "九龍" */
-const char kKowloon[] = "\xE4\xB9\x9D\xE9\xBE\x8D";
-
-/* "新疆维吾尔自治区" */
-const char kXinJiang[] =
-    "\xE6\x96\xB0\xE7\x96\x86\xE7\xBB\xB4\xE5\x90\xBE\xE5\xB0\x94"
-    "\xE8\x87\xAA\xE6\xB2\xBB\xE5\x8C\xBA";
-
-/* "喀什地区" */
-const char kKashiDiqu[] = "\xE5\x96\x80\xE4\xBB\x80\xE5\x9C\xB0\xE5\x8C\xBA";
-
-/* "喀什市" */
-const char kKashiShi[] = "\xE5\x96\x80\xE4\xBB\x80\xE5\xB8\x82";
-
 using i18n::addressinput::AddressData;
 using i18n::addressinput::BuildCallback;
 using i18n::addressinput::LookupKey;
@@ -77,8 +58,8 @@
 
   static SupplierWrapper* Build() { return new OndemandSupplierWrapper; }
 
-  virtual void Supply(const LookupKey& lookup_key,
-                      const Supplier::Callback& supplied) {
+  void Supply(const LookupKey& lookup_key,
+              const Supplier::Callback& supplied) override {
     ondemand_supplier_.Supply(lookup_key, supplied);
   }
 
@@ -96,8 +77,8 @@
 
   static SupplierWrapper* Build() { return new PreloadSupplierWrapper; }
 
-  virtual void Supply(const LookupKey& lookup_key,
-                      const Supplier::Callback& supplied) {
+  void Supply(const LookupKey& lookup_key,
+              const Supplier::Callback& supplied) override {
     const std::string& region_code = lookup_key.GetRegionCode();
     if (!region_code.empty() && !preload_supplier_.IsLoaded(region_code)) {
       preload_supplier_.LoadRules(region_code, *loaded_);
@@ -190,7 +171,7 @@
 
 TEST_P(SupplierTest, KeyDepthEqualsMaxDepth) {
   address_.region_code = "HK";
-  address_.administrative_area = kKowloon;
+  address_.administrative_area = u8"九龍";
 
   ASSERT_NO_FATAL_FAILURE(Supply());
   ASSERT_TRUE(called_);
@@ -202,7 +183,7 @@
 
 TEST_P(SupplierTest, KeyDepthLargerThanMaxDepth) {
   address_.region_code = "HK";
-  address_.administrative_area = kKowloon;
+  address_.administrative_area = u8"九龍";
   address_.locality = "bbb";  // Ignored!
 
   ASSERT_NO_FATAL_FAILURE(Supply());
@@ -237,7 +218,7 @@
 
 TEST_P(SupplierTest, KeyDepth1) {
   address_.region_code = "CN";
-  address_.administrative_area = kXinJiang;
+  address_.administrative_area = u8"新疆维吾尔自治区";
 
   ASSERT_NO_FATAL_FAILURE(Supply());
   ASSERT_TRUE(called_);
@@ -249,8 +230,8 @@
 
 TEST_P(SupplierTest, KeyDepth2) {
   address_.region_code = "CN";
-  address_.administrative_area = kXinJiang;
-  address_.locality = kKashiDiqu;
+  address_.administrative_area = u8"新疆维吾尔自治区";
+  address_.locality = u8"喀什地区";
 
   ASSERT_NO_FATAL_FAILURE(Supply());
   ASSERT_TRUE(called_);
@@ -262,9 +243,9 @@
 
 TEST_P(SupplierTest, KeyDepth3) {
   address_.region_code = "CN";
-  address_.administrative_area = kXinJiang;
-  address_.locality = kKashiDiqu;
-  address_.dependent_locality = kKashiShi;
+  address_.administrative_area = u8"新疆维吾尔自治区";
+  address_.locality = u8"喀什地区";
+  address_.dependent_locality = u8"喀什市";
 
   ASSERT_NO_FATAL_FAILURE(Supply());
   ASSERT_TRUE(called_);
diff --git a/cpp/test/testdata_source.h b/cpp/test/testdata_source.h
index 3c8e76b..f5203e2 100644
--- a/cpp/test/testdata_source.h
+++ b/cpp/test/testdata_source.h
@@ -67,10 +67,10 @@
   // |src_path| is a path to the test data file.
   TestdataSource(bool aggregate, const std::string& src_path);
 
-  virtual ~TestdataSource();
+  ~TestdataSource() override;
 
   // Source implementation.
-  virtual void Get(const std::string& key, const Callback& data_ready) const;
+  void Get(const std::string& key, const Callback& data_ready) const override;
 
  private:
   const bool aggregate_;
diff --git a/cpp/test/testdata_source_test.cc b/cpp/test/testdata_source_test.cc
index dfaf965..304d192 100644
--- a/cpp/test/testdata_source_test.cc
+++ b/cpp/test/testdata_source_test.cc
@@ -79,7 +79,7 @@
     return testing::AssertionFailure() << "empty data";
   }
 
-  std::string expected_data_begin = "{\"id\":\"" + key + "\"";
+  std::string expected_data_begin = R"({"id":")" + key + R"(")";
   if (data.compare(0, expected_data_begin.length(), expected_data_begin) != 0) {
     return testing::AssertionFailure() << data << " does not begin with "
                                        << expected_data_begin;
diff --git a/cpp/test/util/json_test.cc b/cpp/test/util/json_test.cc
index 594c341..7ead26a 100644
--- a/cpp/test/util/json_test.cc
+++ b/cpp/test/util/json_test.cc
@@ -43,7 +43,7 @@
 
 TEST(JsonTest, OneKeyIsValid) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\": \"value\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key": "value"})"));
   std::string value;
   EXPECT_TRUE(json.GetStringValueForKey("key", &value));
   EXPECT_EQ("value", value);
@@ -51,14 +51,14 @@
 
 TEST(JsonTest, EmptyStringKeyIsNotInObject) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\": \"value\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key": "value"})"));
   std::string not_checked;
   EXPECT_FALSE(json.GetStringValueForKey(std::string(), &not_checked));
 }
 
 TEST(JsonTest, EmptyKeyIsValid) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"\": \"value\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"": "value"})"));
   std::string value;
   EXPECT_TRUE(json.GetStringValueForKey(std::string(), &value));
   EXPECT_EQ("value", value);
@@ -66,7 +66,7 @@
 
 TEST(JsonTest, EmptyValueIsValid) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\": \"\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key": ""})"));
   std::string value;
   EXPECT_TRUE(json.GetStringValueForKey("key", &value));
   EXPECT_TRUE(value.empty());
@@ -74,10 +74,10 @@
 
 TEST(JsonTest, Utf8EncodingIsValid) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\": \"\xC3\x9C\"}"));  /* "Ü" */
+  ASSERT_TRUE(json.ParseObject(u8R"({"key": "Ü"})"));
   std::string value;
   EXPECT_TRUE(json.GetStringValueForKey("key", &value));
-  EXPECT_EQ("\xC3\x9C", value);  /* "Ü" */
+  EXPECT_EQ(u8"Ü", value);
 }
 
 TEST(JsonTest, InvalidUtf8IsNotValid) {
@@ -93,7 +93,7 @@
 
 TEST(JsonTest, TwoKeysAreValid) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key1\": \"value1\", \"key2\": \"value2\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key1": "value1", "key2": "value2"})"));
   std::string value;
   EXPECT_TRUE(json.GetStringValueForKey("key1", &value));
   EXPECT_EQ("value1", value);
@@ -109,7 +109,7 @@
 
 TEST(JsonTest, StringIsNotValid) {
   Json json;
-  EXPECT_FALSE(json.ParseObject("\"value\""));
+  EXPECT_FALSE(json.ParseObject(R"("value")"));
 }
 
 TEST(JsonTest, NumberIsNotValid) {
@@ -119,13 +119,13 @@
 
 TEST(JsonTest, NoDictionaryFound) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\":\"value\"}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key":"value"})"));
   EXPECT_TRUE(json.GetSubDictionaries().empty());
 }
 
 TEST(JsonTest, DictionaryFound) {
   Json json;
-  ASSERT_TRUE(json.ParseObject("{\"key\":{\"inner_key\":\"value\"}}"));
+  ASSERT_TRUE(json.ParseObject(R"({"key":{"inner_key":"value"}})"));
   const std::vector<const Json*>& sub_dicts = json.GetSubDictionaries();
   ASSERT_EQ(1U, sub_dicts.size());
 
@@ -137,7 +137,7 @@
 TEST(JsonTest, DictionariesHaveSubDictionaries) {
   Json json;
   ASSERT_TRUE(json.ParseObject(
-      "{\"key\":{\"inner_key\":{\"inner_inner_key\":\"value\"}}}"));
+      R"({"key":{"inner_key":{"inner_inner_key":"value"}}})"));
   const std::vector<const Json*>& sub_dicts = json.GetSubDictionaries();
   ASSERT_EQ(1U, sub_dicts.size());
 
diff --git a/cpp/test/util/string_compare_test.cc b/cpp/test/util/string_compare_test.cc
index 7b932b6..e2a636b 100644
--- a/cpp/test/util/string_compare_test.cc
+++ b/cpp/test/util/string_compare_test.cc
@@ -72,35 +72,12 @@
         TestCase("foo", "foo", true, false),
         TestCase("foo", "FOO", true, false),
         TestCase("bar", "foo", false, true),
-        TestCase(
-            "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-            "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",  /* "강원도" */
-            true, false),
-        TestCase(
-            /* "강원도" */
-            "\xEA\xB0\x95\xEC\x9B\x90\xEB\x8F\x84",
-            /* "대구광역시" */
-            "\xEB\x8C\x80\xEA\xB5\xAC\xEA\xB4\x91\xEC\x97\xAD\xEC\x8B\x9C",
-            false, true),
-        TestCase(
-            "Z\xC3\x9CRICH",  /* "ZÜRICH" */
-            "z\xC3\xBCrich",  /* "zürich" */
-            true, false),
-        TestCase(
-            "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "абв" */
-            "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "где" */
-            false, true),
-        TestCase(
-            "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "абв" */
-            "\xD0\x93\xD0\x94\xD0\x95",  /* "ГДЕ" */
-            false, true),
-        TestCase(
-            "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "где" */
-            "\xD0\xB0\xD0\xB1\xD0\xB2",  /* "абв" */
-            false, false),
-        TestCase(
-            "\xD0\xB3\xD0\xB4\xD0\xB5",  /* "где" */
-            "\xD0\x90\xD0\x91\xD0\x92",  /* "АБВ" */
-            false, false)));
+        TestCase(u8"강원도", u8"강원도", true, false),
+        TestCase(u8"강원도", u8"대구광역시", false, true),
+        TestCase(u8"ZÜRICH", u8"zürich", true, false),
+        TestCase(u8"абв", u8"где", false, true),
+        TestCase(u8"абв", u8"ГДЕ", false, true),
+        TestCase(u8"где", u8"абв", false, false),
+        TestCase(u8"где", u8"АБВ", false, false)));
 
 }  // namespace
diff --git a/cpp/test/validation_task_test.cc b/cpp/test/validation_task_test.cc
index ba7819a..fdde7cc 100644
--- a/cpp/test/validation_task_test.cc
+++ b/cpp/test/validation_task_test.cc
@@ -260,7 +260,7 @@
 }
 
 TEST_F(ValidationTaskTest, UnknownValueRuleNull) {
-  json_[0] = "{\"fmt\":\"%R%S\",\"require\":\"RS\",\"sub_keys\":\"aa~bb\"}";
+  json_[0] = R"({"fmt":"%R%S","require":"RS","sub_keys":"aa~bb"})";
 
   address_.region_code = "rrr";
   address_.administrative_area = "sss";
@@ -273,7 +273,7 @@
 }
 
 TEST_F(ValidationTaskTest, NoUnknownValueRuleNotNull) {
-  json_[0] = "{\"fmt\":\"%R%S\",\"require\":\"RS\",\"sub_keys\":\"aa~bb\"}";
+  json_[0] = R"({"fmt":"%R%S","require":"RS","sub_keys":"aa~bb"})";
   json_[1] = "{}";
 
   address_.region_code = "rrr";
@@ -285,7 +285,7 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeUnrecognizedFormatTooShort) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "12";
@@ -298,7 +298,7 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeUnrecognizedFormatTooLong) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "1234";
@@ -311,7 +311,7 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeRecognizedFormat) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "123";
@@ -322,8 +322,8 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeMismatchingValue1) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
-  json_[1] = "{\"zip\":\"1\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
+  json_[1] = R"({"zip":"1"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "000";
@@ -336,9 +336,9 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeMismatchingValue2) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
-  json_[1] = "{\"zip\":\"1\"}";
-  json_[2] = "{\"zip\":\"12\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
+  json_[1] = R"({"zip":"1"})";
+  json_[2] = R"({"zip":"12"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "100";
@@ -351,10 +351,10 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeMismatchingValue3) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
-  json_[1] = "{\"zip\":\"1\"}";
-  json_[2] = "{\"zip\":\"12\"}";
-  json_[3] = "{\"zip\":\"123\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
+  json_[1] = R"({"zip":"1"})";
+  json_[2] = R"({"zip":"12"})";
+  json_[3] = R"({"zip":"123"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "120";
@@ -367,10 +367,10 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeMatchingValue) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{3}\"}";
-  json_[1] = "{\"zip\":\"1\"}";
-  json_[2] = "{\"zip\":\"12\"}";
-  json_[3] = "{\"zip\":\"123\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{3}"})";
+  json_[1] = R"({"zip":"1"})";
+  json_[2] = R"({"zip":"12"})";
+  json_[3] = R"({"zip":"123"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "123";
@@ -381,8 +381,8 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodePrefixMismatchingValue) {
-  json_[0] = "{\"fmt\":\"%Z\",\"zip\":\"\\\\d{5}\"}";
-  json_[1] = "{\"zip\":\"9[0-5]|96[01]\"}";
+  json_[0] = R"({"fmt":"%Z","zip":"\\d{5}"})";
+  json_[1] = R"({"zip":"9[0-5]|96[01]"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "10960";
@@ -395,8 +395,8 @@
 }
 
 TEST_F(ValidationTaskTest, PostalCodeFilterIgnoresMismatching) {
-  json_[0] = "{\"zip\":\"\\\\d{3}\"}";
-  json_[1] = "{\"zip\":\"1\"}";
+  json_[0] = R"({"zip":"\\d{3}"})";
+  json_[1] = R"({"zip":"1"})";
 
   address_.region_code = "rrr";
   address_.postal_code = "000";
@@ -412,7 +412,7 @@
 }
 
 TEST_F(ValidationTaskTest, UsesPoBoxLanguageUnd) {
-  json_[0] = "{\"fmt\":\"%A\"}";
+  json_[0] = R"({"fmt":"%A"})";
 
   address_.region_code = "rrr";
   address_.address_line.push_back("aaa");
@@ -427,7 +427,7 @@
 }
 
 TEST_F(ValidationTaskTest, UsesPoBoxLanguageDa) {
-  json_[0] = "{\"fmt\":\"%A\",\"languages\":\"da\"}";
+  json_[0] = R"({"fmt":"%A","languages":"da"})";
 
   address_.region_code = "rrr";
   address_.address_line.push_back("aaa");
@@ -442,7 +442,7 @@
 }
 
 TEST_F(ValidationTaskTest, UsesPoBoxLanguageDaNotMatchDe) {
-  json_[0] = "{\"fmt\":\"%A\",\"languages\":\"da\"}";
+  json_[0] = R"({"fmt":"%A","languages":"da"})";
 
   address_.region_code = "rrr";
   address_.address_line.push_back("aaa");
@@ -455,7 +455,7 @@
 }
 
 TEST_F(ValidationTaskTest, UsesPoBoxAllowPostal) {
-  json_[0] = "{\"fmt\":\"%A\"}";
+  json_[0] = R"({"fmt":"%A"})";
 
   address_.region_code = "rrr";
   address_.address_line.push_back("aaa");