diff --git a/Lib/locale.py b/Lib/locale.py
index 58e625f..7b987be 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -227,22 +227,30 @@
     percents = list(_percent_re.finditer(f))
     new_f = _percent_re.sub('%s', f)
 
-    if isinstance(val, tuple):
-        new_val = list(val)
+    if isinstance(val, collections.Mapping):
+        new_val = []
+        for perc in percents:
+            if perc.group()[-1]=='%':
+                new_val.append('%')
+            else:
+                new_val.append(format(perc.group(), val, grouping))
+    else:
+        if not isinstance(val, tuple):
+            val = (val,)
+        new_val = []
         i = 0
         for perc in percents:
-            starcount = perc.group('modifiers').count('*')
-            new_val[i] = format(perc.group(), new_val[i], grouping, False, *new_val[i+1:i+1+starcount])
-            del new_val[i+1:i+1+starcount]
-            i += (1 + starcount)
-        val = tuple(new_val)
-    elif isinstance(val, collections.Mapping):
-        for perc in percents:
-            key = perc.group("key")
-            val[key] = format(perc.group(), val[key], grouping)
-    else:
-        # val is a single value
-        val = format(percents[0].group(), val, grouping)
+            if perc.group()[-1]=='%':
+                new_val.append('%')
+            else:
+                starcount = perc.group('modifiers').count('*')
+                new_val.append(_format(perc.group(),
+                                      val[i],
+                                      grouping,
+                                      False,
+                                      *val[i+1:i+1+starcount]))
+                i += (1 + starcount)
+    val = tuple(new_val)
 
     return new_f % val
 
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index 9439522..6cdb67b 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -236,6 +236,25 @@
         self.assertRaises(ValueError, locale.format, " %f", 'foo')
         self.assertRaises(ValueError, locale.format, "%fg", 'foo')
         self.assertRaises(ValueError, locale.format, "%^g", 'foo')
+        self.assertRaises(ValueError, locale.format, "%f%%", 'foo')
+
+
+class TestLocaleFormatString(unittest.TestCase):
+    """General tests on locale.format_string"""
+
+    def test_percent_escape(self):
+        self.assertEqual(locale.format_string('%f%%', 1.0), '%f%%' % 1.0)
+        self.assertEqual(locale.format_string('%d %f%%d', (1, 1.0)),
+            '%d %f%%d' % (1, 1.0))
+        self.assertEqual(locale.format_string('%(foo)s %%d', {'foo': 'bar'}),
+            ('%(foo)s %%d' % {'foo': 'bar'}))
+
+    def test_mapping(self):
+        self.assertEqual(locale.format_string('%(foo)s bing.', {'foo': 'bar'}),
+            ('%(foo)s bing.' % {'foo': 'bar'}))
+        self.assertEqual(locale.format_string('%(foo)s', {'foo': 'bar'}),
+            ('%(foo)s' % {'foo': 'bar'}))
+
 
 
 class TestNumberFormatting(BaseLocalizedTest, EnUSNumberFormatting):
@@ -377,6 +396,7 @@
     tests = [
         TestMiscellaneous,
         TestFormatPatternArg,
+        TestLocaleFormatString,
         TestEnUSNumberFormatting,
         TestCNumberFormatting,
         TestFrFRNumberFormatting,
diff --git a/Misc/NEWS b/Misc/NEWS
index e72463a..852cc4f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -339,6 +339,9 @@
 Library
 -------
 
+- Issue #6656: fix locale.format_string to handle escaped percents
+  and mappings.
+
 - Issue #2302: Fix a race condition in SocketServer.BaseServer.shutdown,
   where the method could block indefinitely if called just before the
   event loop started running.  This also fixes the occasional freezes
