diff --git a/Lib/test/test__locale.py b/Lib/test/test__locale.py
index 09b05af..54ac6aa 100644
--- a/Lib/test/test__locale.py
+++ b/Lib/test/test__locale.py
@@ -1,8 +1,12 @@
 from test.support import verbose, run_unittest
-import _locale
-from _locale import (setlocale, LC_ALL, LC_CTYPE, LC_NUMERIC, nl_langinfo,
-                     localeconv, Error)
+from _locale import (setlocale, LC_ALL, LC_CTYPE, LC_NUMERIC, localeconv, Error)
+try:
+    from _locale import (RADIXCHAR, THOUSEP, nl_langinfo)
+except ImportError:
+    nl_langinfo = None
+
 import unittest
+import sys
 from platform import uname
 
 if uname()[0] == "Darwin":
@@ -21,15 +25,18 @@
     'eu_ES', 'vi_VN', 'af_ZA', 'nb_NO', 'en_DK', 'tg_TJ', 'en_US',
     'es_ES.ISO8859-1', 'fr_FR.ISO8859-15', 'ru_RU.KOI8-R', 'ko_KR.eucKR']
 
+# Workaround for MSVC6(debug) crash bug
+if "MSC v.1200" in sys.version:
+    def accept(loc):
+        a = loc.split(".")
+        return not(len(a) == 2 and len(a[-1]) >= 9)
+    candidate_locales = [loc for loc in candidate_locales if accept(loc)]
+
 # List known locale values to test against when available.
 # Dict formatted as ``<locale> : (<decimal_point>, <thousands_sep>)``.  If a
 # value is not known, use '' .
 known_numerics = {'fr_FR' : (',', ''), 'en_US':('.', ',')}
 
-def needs_radix_and_thousands(func):
-    return unittest.skipUnless(hasattr(_locale, "RADIXCHAR"),
-                               "needs RADIXCHAR and THOUSEP")(func)
-
 class _LocaleTests(unittest.TestCase):
 
     def setUp(self):
@@ -58,7 +65,7 @@
                                     calc_type, data_type, set_locale,
                                     used_locale))
 
-    @needs_radix_and_thousands
+    @unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
     def test_lc_numeric_nl_langinfo(self):
         # Test nl_langinfo against known values
         for loc in candidate_locales:
@@ -67,11 +74,10 @@
                 setlocale(LC_CTYPE, loc)
             except Error:
                 continue
-            for li, lc in ((_locale.RADIXCHAR, "decimal_point"),
-                            (_locale.THOUSEP, "thousands_sep")):
+            for li, lc in ((RADIXCHAR, "decimal_point"),
+                            (THOUSEP, "thousands_sep")):
                 self.numeric_tester('nl_langinfo', nl_langinfo(li), lc, loc)
 
-    @needs_radix_and_thousands
     def test_lc_numeric_localeconv(self):
         # Test localeconv against known values
         for loc in candidate_locales:
@@ -80,11 +86,11 @@
                 setlocale(LC_CTYPE, loc)
             except Error:
                 continue
-            for li, lc in ((_locale.RADIXCHAR, "decimal_point"),
-                            (_locale.THOUSEP, "thousands_sep")):
+            for lc in ("decimal_point",
+                        "thousands_sep"):
                 self.numeric_tester('localeconv', localeconv()[lc], lc, loc)
 
-    @needs_radix_and_thousands
+    @unittest.skipUnless(nl_langinfo, "nl_langinfo is not available")
     def test_lc_numeric_basic(self):
         # Test nl_langinfo against localeconv
         for loc in candidate_locales:
@@ -93,8 +99,8 @@
                 setlocale(LC_CTYPE, loc)
             except Error:
                 continue
-            for li, lc in ((_locale.RADIXCHAR, "decimal_point"),
-                            (_locale.THOUSEP, "thousands_sep")):
+            for li, lc in ((RADIXCHAR, "decimal_point"),
+                            (THOUSEP, "thousands_sep")):
                 nl_radixchar = nl_langinfo(li)
                 li_radixchar = localeconv()[lc]
                 try:
