diff --git a/Source/cmGlobalNMakeMakefileGenerator.cxx b/Source/cmGlobalNMakeMakefileGenerator.cxx
index cbcd4b33be010efbb7eb27f66ea6722991f80eb3..313f39b5e8c5dde06a1e59a0f039f22a635a1ef2 100644
--- a/Source/cmGlobalNMakeMakefileGenerator.cxx
+++ b/Source/cmGlobalNMakeMakefileGenerator.cxx
@@ -63,11 +63,18 @@ bool cmGlobalNMakeMakefileGenerator::FindMakeProgram(cmMakefile* mf)
       "Program Maintenance Utility Version ([1-9][0-9.]+)");
     if (regex.find(err)) {
       this->NMakeVersion = regex.match(1);
+      this->CheckNMakeFeatures();
     }
   }
   return true;
 }
 
+void cmGlobalNMakeMakefileGenerator::CheckNMakeFeatures()
+{
+  this->NMakeSupportsUTF8 = !cmSystemTools::VersionCompare(
+    cmSystemTools::OP_LESS, this->NMakeVersion.c_str(), "9");
+}
+
 void cmGlobalNMakeMakefileGenerator::GetDocumentation(
   cmDocumentationEntry& entry)
 {
diff --git a/Source/cmGlobalNMakeMakefileGenerator.h b/Source/cmGlobalNMakeMakefileGenerator.h
index c23eef81410f562e8e53dead56886ce2b3cd2bee..ed52378347edc6bd2500a8a1ca25f5af323081b0 100644
--- a/Source/cmGlobalNMakeMakefileGenerator.h
+++ b/Source/cmGlobalNMakeMakefileGenerator.h
@@ -55,8 +55,10 @@ protected:
   void PrintBuildCommandAdvice(std::ostream& os, int jobs) const override;
 
 private:
+  bool NMakeSupportsUTF8 = false;
   std::string NMakeVersion;
   bool FindMakeProgram(cmMakefile* mf) override;
+  void CheckNMakeFeatures();
 
   void PrintCompilerAdvice(std::ostream& os, std::string const& lang,
                            const char* envVar) const override;