summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_ucn.py9
-rw-r--r--Objects/unicodeobject.c11
2 files changed, 17 insertions, 3 deletions
diff --git a/Lib/test/test_ucn.py b/Lib/test/test_ucn.py
index f680140..0797f2c 100644
--- a/Lib/test/test_ucn.py
+++ b/Lib/test/test_ucn.py
@@ -10,6 +10,10 @@ from test_support import verify, verbose
print 'Testing General Unicode Character Name, and case insensitivity...',
# General and case insensitivity test:
+try:
+ # put all \N escapes inside exec'd raw strings, to make sure this
+ # script runs even if the compiler chokes on \N escapes
+ exec r"""
s = u"\N{LATIN CAPITAL LETTER T}" \
u"\N{LATIN SMALL LETTER H}" \
u"\N{LATIN SMALL LETTER E}" \
@@ -37,6 +41,9 @@ s = u"\N{LATIN CAPITAL LETTER T}" \
u"\N{LATIN SMALL LETTER P}" \
u"\N{FULL STOP}"
verify(s == u"The rEd fOx ate the sheep.", s)
+"""
+except UnicodeError, v:
+ print v
print "done."
import ucnhash
@@ -63,10 +70,12 @@ print "Found", count, "characters in the unicode name database"
# misc. symbol testing
print "Testing misc. symbols for unicode character name expansion....",
+exec r"""
verify(u"\N{PILCROW SIGN}" == u"\u00b6")
verify(u"\N{REPLACEMENT CHARACTER}" == u"\uFFFD")
verify(u"\N{HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK}" == u"\uFF9F")
verify(u"\N{FULLWIDTH LATIN SMALL LETTER A}" == u"\uFF41")
+"""
print "done."
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index a06c40b..585afe6 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -1240,15 +1240,15 @@ PyObject *PyUnicode_DecodeUnicodeEscape(const char *s,
PyObject *mod = 0, *v = 0;
mod = PyImport_ImportModule("ucnhash");
if (mod == NULL)
- goto onError;
+ goto ucnhashError;
v = PyObject_GetAttrString(mod,"Unicode_Names_CAPI");
Py_DECREF(mod);
if (v == NULL)
- goto onError;
+ goto ucnhashError;
unicode_names = PyCObject_AsVoidPtr(v);
Py_DECREF(v);
if (unicode_names == NULL)
- goto onError;
+ goto ucnhashError;
}
if (*s == '{') {
@@ -1311,6 +1311,11 @@ store:
goto onError;
return (PyObject *)v;
+ ucnhashError:
+ PyErr_SetString(PyExc_UnicodeError,
+ "\\N escapes not supported (can't load ucnhash module)");
+ return NULL;
+
onError:
Py_XDECREF(v);
return NULL;