00001 #include "../include/DatabaseStringConverter.h"
00002
00003
00004 DatabaseStringConverter::DatabaseStringConverter()
00005 : m_Encoding(wxT("UTF-8"))
00006 {
00007 }
00008
00009 DatabaseStringConverter::DatabaseStringConverter(const wxChar* charset)
00010 : m_Encoding(charset)
00011 {
00012 }
00013
00014 void DatabaseStringConverter::SetEncoding(wxFontEncoding encoding)
00015 {
00016 m_Encoding = wxCSConv(encoding);
00017 }
00018
00019 void DatabaseStringConverter::SetEncoding(const wxCSConv* conv)
00020 {
00021 m_Encoding = *conv;
00022 }
00023
00024 const wxCharBuffer DatabaseStringConverter::ConvertToUnicodeStream(const wxString& inputString)
00025 {
00026 #if wxUSE_UNICODE
00027 return wxConvUTF8.cWC2MB(inputString.wc_str(*wxConvCurrent));
00028 #else
00029 wxString str(inputString.wc_str(*wxConvCurrent), wxConvUTF8);
00030 return str.mb_str();
00031 #endif
00032 }
00033
00034 size_t DatabaseStringConverter::GetEncodedStreamLength(const wxString& inputString)
00035 {
00036 #if wxUSE_UNICODE
00037 size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(), (unsigned int)0);
00038 #else
00039 size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(wxConvUTF8), (unsigned int)0);
00040 #endif
00041 if (length == 0)
00042 {
00043 wxCharBuffer tempCharBuffer = ConvertToUnicodeStream(inputString);
00044 length = wxStrlen((wxChar*)(const char*)tempCharBuffer);
00045 }
00046
00047 return length;
00048 }
00049
00050 wxString DatabaseStringConverter::ConvertFromUnicodeStream(const char* inputBuffer)
00051 {
00052 wxString strReturn(wxConvUTF8.cMB2WC(inputBuffer), *wxConvCurrent);
00053
00054
00055 if (strReturn == wxEmptyString)
00056 strReturn << wxString(inputBuffer, *wxConvCurrent);
00057
00058 return strReturn;
00059 }
00060
00061 const wxCharBuffer DatabaseStringConverter::ConvertToUnicodeStream(const wxString& inputString, const char* encoding)
00062 {
00063 #if wxUSE_UNICODE
00064 return wxConvUTF8.cWC2MB(inputString.wc_str(*wxConvCurrent));
00065 #else
00066 wxString str(inputString.wc_str(*wxConvCurrent), wxConvUTF8);
00067 return str.mb_str();
00068 #endif
00069 }
00070
00071 size_t DatabaseStringConverter::GetEncodedStreamLength(const wxString& inputString, const char* encoding)
00072 {
00073 #if wxUSE_UNICODE
00074 size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(), (unsigned int)0);
00075 #else
00076 size_t length = wxConvUTF8.WC2MB(NULL, inputString.wc_str(wxConvUTF8), (unsigned int)0);
00077 #endif
00078 if (length == 0)
00079 {
00080 wxCharBuffer tempCharBuffer = DatabaseStringConverter::ConvertToUnicodeStream(inputString, encoding);
00081 length = wxStrlen((wxChar*)(const char*)tempCharBuffer);
00082 }
00083
00084 return length;
00085 }
00086
00087 wxString DatabaseStringConverter::ConvertFromUnicodeStream(const char* inputBuffer, const char* encoding)
00088 {
00089 wxString strReturn(wxConvUTF8.cMB2WC(inputBuffer), *wxConvCurrent);
00090
00091
00092 if (strReturn == wxEmptyString)
00093 strReturn << wxString(inputBuffer, *wxConvCurrent);
00094
00095 return strReturn;
00096 }
00097