diff --git a/django/forms/fields.py b/django/forms/fields.py
index ac68b9f..2ed5c4c 100644
--- a/django/forms/fields.py
+++ b/django/forms/fields.py
@@ -26,7 +26,7 @@ from django.forms.widgets import (
     SplitDateTimeWidget, SplitHiddenDateTimeWidget, FILE_INPUT_CONTRADICTION
 )
 from django.utils import formats
-from django.utils.encoding import smart_text, force_str, force_text
+from django.utils.encoding import smart_text, force_str, force_text, valid_text
 from django.utils.ipv6 import clean_ipv6_address
 from django.utils import six
 from django.utils.translation import ugettext_lazy as _, ungettext_lazy
@@ -82,9 +82,11 @@ class Field(object):
         #                        hidden widget with initial value after widget.
         # validators -- List of addtional validators to use
         # localize -- Boolean that specifies if the field should be localized.
+        if label is not None:
+            label = valid_text(label)
         self.required, self.label, self.initial = required, label, initial
         self.show_hidden_initial = show_hidden_initial
-        self.help_text = help_text
+        self.help_text = valid_text(help_text)
         widget = widget or self.widget
         if isinstance(widget, type):
             widget = widget()
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index adab0d0..400b7b9 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -170,6 +170,18 @@ def force_bytes(s, encoding='utf-8', strings_only=False, errors='strict'):
     else:
         return s.encode(encoding, errors)
 
+def valid_text(value):
+    """
+    Check that value is either ascii bytestring or unicode non-ascii.
+    """
+    if isinstance(value, bytes):
+        try:
+            six.text_type(value, 'ascii')
+        except UnicodeDecodeError:
+            raise AssertionError("Strings containing non-ASCII chars should be unicode")
+    return value
+
+
 if six.PY3:
     smart_str = smart_text
     force_str = force_text
diff --git a/docs/releases/1.6.txt b/docs/releases/1.6.txt
index 825c5dc..c4bce9c 100644
--- a/docs/releases/1.6.txt
+++ b/docs/releases/1.6.txt
@@ -582,6 +582,9 @@ Miscellaneous
   changes in 1.6 particularly affect :class:`~django.forms.DecimalField` and
   :class:`~django.forms.ModelMultipleChoiceField`.
 
+* Non-ASCII bytestrings are not accepted any longer for the ``label`` and
+  ``help_text`` arguments to form fields ``__init__``.
+
 * There have been changes in the way timeouts are handled in cache backends.
   Explicitly passing in ``timeout=None`` no longer results in using the
   default timeout. It will now set a non-expiring timeout. Passing 0 into the
diff --git a/tests/forms_tests/tests/test_forms.py b/tests/forms_tests/tests/test_forms.py
index 1a3fb44..911ea23 100644
--- a/tests/forms_tests/tests/test_forms.py
+++ b/tests/forms_tests/tests/test_forms.py
@@ -979,6 +979,12 @@ class FormsTestCase(TestCase):
 <p><label for="id_q4">Answer this question!</label> <input type="text" name="q4" id="id_q4" /></p>
 <p><label for="id_q5">The last question. Period.</label> <input type="text" name="q5" id="id_q5" /></p>""")
 
+        # Label should not be a non-ascii bytestring
+        with self.assertRaises(AssertionError):
+            class UserRegistration(Form):
+                username = CharField(max_length=10)
+                password = CharField(widget=PasswordInput, label=b'Contrase\xc3\xb1a')
+
         # If a label is set to the empty string for a field, that field won't get a label.
         class UserRegistration(Form):
             username = CharField(max_length=10, label='')
@@ -1264,6 +1270,11 @@ class FormsTestCase(TestCase):
         self.assertHTMLEqual(p.as_ul(), """<li>Username: <input type="text" name="username" maxlength="10" /> <span class="helptext">e.g., user@example.com</span></li>
 <li>Password: <input type="password" name="password" /><input type="hidden" name="next" value="/" /></li>""")
 
+        # help_text should not be a non-ascii bytestring
+        with self.assertRaises(AssertionError):
+            class UserRegistration(Form):
+                username = CharField(max_length=10, help_text=b'W\xc3\xa4hlen Sie bitte')
+
     def test_subclassing_forms(self):
         # You can subclass a Form to add fields. The resulting form subclass will have
         # all of the fields of the parent Form, plus whichever fields you define in the
