Convert string to wchar.

Jonathan M Davis jmdavisProg at gmx.com
Tue Aug 2 23:38:39 PDT 2011


On Wednesday 03 August 2011 08:29:09 Jacob Carlborg wrote:
> On 2011-08-02 19:51, Jonathan M Davis wrote:
> >> I tried to convert a string into a wchar, but that didn't compile
> >> because of this template constraint:
> >> 
> >> https://github.com/D-Programming-Language/phobos/blob/master/std/conv.
> >> d#L17 70
> >> 
> >> Is there a way to convert a string into a wchar?
> > 
> > Does that even make sense? What do you want it to do, convert the first
> > code point to a wchar and throw if there's more than one character in
> > the string? That's like asking whether you can covert between a
> > container of ints and an int. I would never expect std.conv.to to
> > support that. Not to mention, you shouldn't normally be using char or
> > wchar by themselves, because they might not be valid code points.
> > Normally, only dchar should be used when representing an individual
> > character. If you want this, I'd suggest that you simply do something
> > like
> > 
> > cast(wchar)str.front
> > 
> > What you're asking for is inherently unsafe as far as unicode goes.
> > 
> > - Jonathan M Davis
> 
> I'm working on a serialization library and I intend to support as many
> types as possible. So if someone serializes a single wchar I need to be
> able to deserialize it. Since the serialized data is represented by a
> string, in this case, I need to convert a string containing a single
> character to a wchar when deserializing.
> 
> Yes, convert the first code point to a wchar and then throw if there's
> more the one character in the string.

Well, while it's understandable that you have to cover pretty every possible 
case of converting to and from a string with what you're doing, I don't think 
that it's at all reasonable to have std.conv.to convert a string to any 
character type, let alone one other than dchar. It's almost always a horrible 
idea and should _not_ be encouraged. So, I'd advise you to just find a way to 
deal with it appropriately in your own code. I think that it would be a very 
bad idea for std.conv.to or anything else in Phobos to support such a 
conversion.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list