+
+
+DocDeclAStr(
+ void , wxSetDefaultPyEncoding(const char* encoding),
+ "SetDefaultPyEncoding(string encoding)",
+ "Sets the encoding that wxPython will use when it needs to convert a
+Python string or unicode object to or from a wxString.", "");
+
+DocDeclAStr(
+ const char* , wxGetDefaultPyEncoding(),
+ "GetDefaultPyEncoding() -> string",
+ "Gets the current encoding that wxPython will use when it needs to
+convert a Python string or unicode object to or from a wxString.", "");
+
+
//---------------------------------------------------------------------------
// Include some extra wxApp related python code here
wxMutex* wxPyTMutex = NULL;
#endif
+#define DEFAULTENCODING_SIZE 64
+static char wxPyDefaultEncoding[DEFAULTENCODING_SIZE] = "ascii";
static PyObject* wxPython_dict = NULL;
static PyObject* wxPyAssertionError = NULL;
#if wxUSE_UNICODE
PyObject* uni = source;
if (PyString_Check(source)) {
- uni = PyUnicode_FromObject(source);
+ uni = PyUnicode_FromEncodedObject(source, wxPyDefaultEncoding, "strict");
if (PyErr_Occurred()) return NULL;
}
target = new wxString();
#else
// Convert to a string object if it isn't already, then to wxString
PyObject* str = source;
- if (!PyString_Check(source)) {
+ if (PyUnicode_Check(source)) {
+ str = PyUnicode_AsEncodedString(source, wxPyDefaultEncoding, "strict");
+ if (PyErr_Occurred()) return NULL;
+ }
+ else if (!PyString_Check(source)) {
str = PyObject_Str(source);
if (PyErr_Occurred()) return NULL;
}
// Convert to a unicode object, if not already, then to a wxString
PyObject* uni = source;
if (!PyUnicode_Check(source)) {
- uni = PyUnicode_FromObject(source);
+ uni = PyUnicode_FromEncodedObject(source, wxPyDefaultEncoding, "strict");
if (PyErr_Occurred()) return wxEmptyString; // TODO: should we PyErr_Clear?
}
size_t len = PyUnicode_GET_SIZE(uni);
#else
// Convert to a string object if it isn't already, then to wxString
PyObject* str = source;
- if (!PyString_Check(source)) {
+ if (PyUnicode_Check(source)) {
+ str = PyUnicode_AsEncodedString(source, wxPyDefaultEncoding, "strict");
+ if (PyErr_Occurred()) return wxEmptyString; // TODO: should we PyErr_Clear?
+ }
+ else if (!PyString_Check(source)) {
str = PyObject_Str(source);
if (PyErr_Occurred()) return wxEmptyString; // TODO: should we PyErr_Clear?
}
}
+
+void wxSetDefaultPyEncoding(const char* encoding)
+{
+ strncpy(wxPyDefaultEncoding, encoding, DEFAULTENCODING_SIZE);
+}
+
+const char* wxGetDefaultPyEncoding()
+{
+ return wxPyDefaultEncoding;
+}
+
//----------------------------------------------------------------------