|
In the Microsoft stl libraries, localization uses C interface. The locale class calls setlocale function. And it cannot work with UTF-8.
From the Remarks section on the setlocale function reference:
"The set of available languages, country/region codes, and code pages includes all those supported by the Win32 NLS API (except code pages that require more than two bytes per character, like UTF-8)."
|
|
|
|
|
Yeah once again about it!
I know, there is a way to do it using crt function mbstowcs. The first thing I do not like about it I have single-byte character string (in the cp1251 encoding for example). The second it's not about stl.
|
|
|
|
|
alabax wrote: Yeah once again about it!
huu ???[^]
how many CP accounts do you have ?
|
|
|
|
|
that's the only
|
|
|
|
|
yeah, that's what i see, so, why did you say "once again about it" ???
|
|
|
|
|
I mean questions like this appear every month on the newsgroups and message boards. =)
|
|
|
|
|
|
like this:
wstring s2w(const string &s)
{
size_t l=s.size()+1;
const char *pc=s.c_str();
wchar_t *pw=new wchar_t[l];
locale loc("");
use_facet<ctype<wchar_t>>(loc).widen(pc,pc+l-1,pw);
return wstring(pw);
}
-- modified at 14:03 Wednesday 12th April, 2006
|
|
|
|
|
Look s about right - proof of the pudding's in the testing, of course!
|
|
|
|
|
OMG! It's such a shame I did new without delete
GC is deep in my mind!
wstring s2w(const string &s)
{
size_t l=s.size()+1;
const char *pc=s.c_str();
wchar_t *pw=new wchar_t[l];
if (pw==0) throw;
locale loc("");
use_facet<ctype<wchar_t>>(loc).widen(pc,pc+l-1,pw);
wstring ws(pw);
delete [] pw;
return ws;
}
|
|
|
|
|
You could always use a vector instead.
vector<wchar_t> pw(l);
...
use_facet<ctype<wchar_t> >(loc).widen(pc,pc+l-1,&pw[0]);
wstring ws(&pw[0]);
The Rob Blog Google Talk: robert.caldecott
|
|
|
|
|
|
You're not freeing the memory used by pw, unless I've missed something?
The Rob Blog Google Talk: robert.caldecott
|
|
|
|
|
locale global_locale;
wstring s2w(const string &s,const locale &loc=global_locale)
{
size_t l=s.length()+1;
const char *pc=s.c_str();
wchar_t *pw=new wchar_t[l];
if (pw==0) throw;
use_facet<ctype<wchar_t>>(loc).widen(pc,pc+l-1,pw);
pw[l-1]=L'\0';
wstring ws(pw);
delete [] pw;
return ws;
}
|
|
|
|
|
Not exception safe
As others suggested, use std::vector or boost::scoped_array instead of new[]-delete[]
My programming blahblahblah blog. If you ever find anything useful here, please let me know to remove it.
|
|
|
|
|
Ok, here comes cute solution
wstring s2w(const string &s,const locale &loc=global_locale)
{
size_t l=s.length();
vector<wchar_t> pw(l+1);
use_facet<ctype<wchar_t>>(loc).widen(&s[0],&s[l],&pw[0]);
wstring ws(&pw[0]);
return ws;
}
widen does not append trailing L'\0'!
The question is: does vector always initialize values to 0?
|
|
|
|
|
alabax wrote: The question is: does vector always initialize values to 0?
Yes, the default value of a simple type using this vector ctor:
explicit vector(size_type count); is 0. For classes, the default ctor is run, if no explicit value is provided in this vector ctor:
vector(size_type count, const T& value); .
--
The Blog: Bits and Pieces
|
|
|
|
|
hi all,
how to acess messages from MSMQ Events when message arrived from source to Destination in OnArrived() function.
thanks,
uday.
uday kiran
|
|
|
|
|
Since you are not having any luck with this question, you might try the microsoft.public.msmq.programming newsgroup.
"Let us be thankful for the fools. But for them the rest of us could not succeed." - Mark Twain
"There is no death, only a change of worlds." - Native American Proverb
|
|
|
|
|
hi all,
i am having two interface. the first interface is name FirstInterface and i have one method in that named one(). Suppose i make another interface named SecondInterface then how can i use the FirstInterface Methods in this Interface. (ie) i have to use one() mehtod of the FirstInterface in SecondInteface.
please let me know if any solution other than Containment/Aggrigation.
thanks
uday.
uday kiran
|
|
|
|
|
It depends on how you've implemented your COM object. If you implement the interfaces using multiple inheritance such as ATL does it's just a matter of calling the method as you would any other member function. If you use the nested class approach, as MFC does, it's a little more complicated (but not much). Another approach would be to do a QueryInterface , call the method, then do a Release - but this is a bit heavy handed. More detail is needed to properly answer this question.
Steve
|
|
|
|
|
Alright, i've been looking for a while now.
I need a simple activeX control, witch i client get to download when he comes to a specific page at my site. That control can launch a application on the clients computer, on command of the webserver. and can send messages to the webserver. well... how to create this control. I've looked to some articles and searched for some information, but i must say... its very unclear, not that i dont understand it. i've got my experiance with com stuff. but most of those articles goes about those atl stuff that is running on the webserver. and not about ATL stuff running on the client. does anyone can push me in the right direction, anyone knows a good article about it? or can just anyone tell me what the right term is for what i'm looking for?
thanks already!
|
|
|
|
|
Hello friends,
I am vishal. I am developing messenger like GUI. I am not able to set the background color of WTL tab control. I don't know how can I do that!
Can u please help me.
To build this GUI I am refering WTLButtonST project on this same site.
cheers'
vishal jagtap
|
|
|
|
|
Hi all,
i want to access remote folders in a network. I am using NetUseAdd(...) Api, i am able to establish a connection to the Remote Machine what shall i do to access the Remote Folders.
thanks,
uday.
uday kiran
|
|
|
|
|
1) Share the folder on the nework machine
2) Then use the UNC path to the share as any other local path for read/write
If the share has only limited access, then Impersonate a user who has read/write access.
To impersonate:
1) use the username and password with read/write permission to call LogonUser()
2) Call ImpersonateLoggedOnUser() with the tocken u received from LogonUser() .
cheers...mil10
|
|
|
|