Index: ogr/ogrsf_frmts/sde/ogrsdelayer.cpp =================================================================== --- ogr/ogrsf_frmts/sde/ogrsdelayer.cpp (revision 17251) +++ ogr/ogrsf_frmts/sde/ogrsdelayer.cpp (working copy) @@ -35,6 +35,7 @@ CPL_CVSID("$Id$"); + /************************************************************************/ /* OGRSDELayer() */ /************************************************************************/ @@ -219,13 +220,13 @@ nWidth = asColumnDefs[iCol].size; break; -#ifdef SE_NSTRING_TYPE + case SE_NSTRING_TYPE: - eOGRType = OFTWideString; + eOGRType = OFTString; nWidth = asColumnDefs[iCol].size; break; -#endif + case SE_BLOB_TYPE: eOGRType = OFTBinary; break; @@ -959,6 +960,25 @@ return OGRERR_FAILURE; } } + else if( poFieldDefn->GetType() == OFTWideString ) + { + const int nstring_size = strlen (poField->String ); + SE_WCHAR * pszTempStringUTF16 = (SE_WCHAR * ) CPLMalloc (nstring_size * sizeof(SE_WCHAR )); + char* utf16_string = CPLRecode(poField->String, CPL_ENC_UTF8, CPL_ENC_UTF16 ); + + + nSDEErr = SE_stream_set_nstring( hStream, iCurColNum++, + pszTempStringUTF16 ); + if( nSDEErr != SE_SUCCESS ) + { + poDS->IssueSDEError( nSDEErr, "SE_stream_set_nstring" ); + CSLDestroy( papszInsertCols ); + CPLFree( paiColToDefMap ); + CPLFree (pszTempStringUTF16); + CPLFree (utf16_string); + return OGRERR_FAILURE; + } + } else if( poFieldDefn->GetType() == OFTString ) { @@ -1770,6 +1790,32 @@ } break; + case SE_NSTRING_TYPE: + { + const int nstring_size = SE_QUALIFIED_COLUMN_LEN; + SE_WCHAR * pszTempStringUTF16 = (SE_WCHAR * ) CPLMalloc (nstring_size * sizeof(SE_WCHAR )); + + nSDEErr = SE_stream_get_nstring( hStream, anFieldMap[i]+1, pszTempStringUTF16 ); + + if( nSDEErr == SE_SUCCESS ) { + + char* utf8_string = CPLRecodeFromWChar((const wchar_t*)pszTempStringUTF16, CPL_ENC_UTF16, CPL_ENC_UTF8); + poFeat->SetField( i, utf8_string); + CPLFree (utf8_string); + + } else if( nSDEErr != SE_NULL_VALUE ) + { + poDS->IssueSDEError( nSDEErr, "SE_stream_get_nstring" ); + CPLFree( pszTempStringUTF16); + + return NULL; + } + CPLFree( pszTempStringUTF16); + } + + + break; + case SE_STRING_TYPE: { char *pszTempString = (char *)