From ripley at stats.ox.ac.uk  Sat Aug 27 13:33:15 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat, 27 Aug 2005 12:33:15 +0100 (BST)
Subject: [Rd] wchar and wstring.
In-Reply-To: <430F9E0E.9020606@berkeley.edu>
References: <430F9E0E.9020606@berkeley.edu>
Message-ID: <Pine.LNX.4.61.0508271221090.2871@gannet.stats>

On Fri, 26 Aug 2005, James Bullard wrote:

> Hello all, I am writing an R interface to some C++ files which make use
> of std::wstring classes for internationalization. Previously (when I
> wanted to make R strings from C++ std::strings), I would do something
> like this to construct a string in R from the results of the parse.
>
> SET_VECTOR_ELT(vals, i++, mkString(header.GetHeader().c_str()));

That creates a list of one-element character vectors.  It would be more
usual to do

   SET_STRING_ELT(vals, i++, mkChar(header.GetHeader().c_str()));

> However, now the call header.GetHeader().c_str() returns a pointer to an 
> array of wchar_t's. I was going to use wcstombs() to convert the 
> wchar_t* to char*, but I wanted to see if there was a similar function 
> in R for the mkString function which I had initially used which deals 
> with wchar_ts as opposed to chars.

No (nor an analogue of mkChar).  R uses MBCS and not wchar_t internally 
(and Unix-alike systems do externally).  There is no wchar_t internal R 
type (a much-debated design decision at the time).

> Also, since I have no experience with the wctombs() function I wanted to 
> ask if anyone knew if this will handle the internationilzation issues 
> from within R.

Did you mean wcstombs or wctomb (if the latter, wcrtomb is preferred)?
There are tens of examples in the R sources for you to consult.

Note that not all R platforms support wchar_t, hence this code is 
surrounded by #ifdef SUPPORT_MBCS macros (exported in Rconfig.h for 
package writers).

-- 
Brian D. Ripley,                  ripley at stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595



[Rd] wchar and wstring.
Prof Brian Ripley