Re: Problem with Unicode Strings

From: Carlos <miotromailcarlos_at_netscape.net>
Date: Tue, 15 Apr 2008 08:13:48 -0700 (PDT)
Message-ID: <c03f11e2-8cd4-41ff-bba6-b0a0f6c3c7e7@m3g2000hsc.googlegroups.com>


On Apr 15, 3:04 pm, "Andr Hartmann" <andrehartm..._at_hotmail.com> wrote:
> Hi,
> I am having trouble with stuffing in an getting out unicode strings
> into/from my database. I will briefly describe what I am doing, hoping that
> someone can point me to a mistake and end my weeks of trying...
>
> * Oracle 9i client and server, connecting via OCI from a C++ (MS Dev Studio
> 2005) application
> * Client OS: German Windows XP, SP2
> * Server: Oracle9.2.0.1 Enterprise on Windows XP SP2, NLS_LANGUAGE=AMERICAN
> * Server character set (determined via "select value from
> nls_database_parameters where parameter='NLS_CHARACTERSET';"): WE8MSWIN1252
> * Client character set GERMAN_GERMANY.WE8MSWIN1252 (determined via "sqlplus
> /nolog" and @.[%NLS_LANG%])
>
> What I am doing in my program to stuff unicode in is this:
>
> std::wstring strUnicode(L"b穾??df??");//not correctly displayed here
> because this message is not unicode
> ...
> wchar_t* pValue = (pWS_ == NULL) ? NULL : _wcsdup( strUnicode.c_str() );
> size_t nSize = (pValue == NULL) ? 0 : (sizeof(wchar_t) * (1 +
> wcslen(pValue)));
> ...
> swdReturnCode = OCIBindByPos (
> (OCIStmt*) m_pOCIStatement,
> (OCIBind**) &pBindHandle,
> (OCIError*) m_pConnection->_getOCIError(),
> (ub4) columnIndex_,
> (dvoid*) pValue,
> (sb4) nSize,
> (ub2) SQLT_STR,
> (dvoid*) NULL,
> (ub2*) NULL,
> (ub2*) NULL,
> (ub4) NULL,
> (ub4*) NULL,
> (ub4) OCI_DEFAULT
> );
> ub2 csid = OCI_UTF16ID;
> swdReturnCode = OCIAttrSet(
> (void *) pBindHandle
> , (ub4) OCI_HTYPE_BIND
> , (void *) &csid
> , (ub4) 0
> , (ub4) OCI_ATTR_CHARSET_ID
> , m_pConnection->_getOCIError()
> );
> ...
>
> The string that I am stuffing in corresponds to the following sequence of
> integers in my program's main memory:
>
> 194,98,231,169,190,252,1046,950,100,233,241,102,1715,1492
>
> When I select I get the following back (displayed as "b穾df"):
>
> 194,98,231,169,190,252,191,191,100,233,241,102,191,191
>
> So it turns out that some characters have been transformed to be
> upsode-down question marks. I see the same thing when I dont fetch with my
> application but with the Oracle Enterprose Manager.
>
> What is wrong here? Am I missing out some important conversion on the way?
> Thanks in advance,
> Andr
> :)

I cannot see the point of storing UNICODE (UTF8? UTF16?) in a WE8MSWIN1252 database... (you don't specify the NLSupport codepage for NVARCHARS/NCHARS) The DB codepage should be unicode (AL32UTF8).

Cheers.

Carlos. Received on Tue Apr 15 2008 - 10:13:48 CDT

Original text of this message