UTF-8 std::string to System::String^

B

barnum

Hi,

I have a std::string which I know is UTF-8 encoded. How can I make a
System::String^ from it?
I tried UTF8Encoding class, but it wants a Byte array, and I don't
know how to get that from a std::string.

Thanks for any help!
 
J

jehugaleahsa

Hi,

I have a std::string which I know is UTF-8 encoded. How can I make a
System::String^ from it?
I tried UTF8Encoding class, but it wants a Byte array, and I don't
know how to get that from a std::string.

Thanks for any help!

Since you know that your string is UTF-8, you need only be worried
that chars are 8-bits wide.

std::string s = "Hello, World";
char const* buffer = s.c_str();
From this point you can fill a Byte array. I am not totally sure how
to do this in Managed C++, but it should get you to where you are
going.

Outside of that I can't help you.
 
B

Ben Voigt [C++ MVP]

Since you know that your string is UTF-8, you need only be worried
that chars are 8-bits wide.

std::string s = "Hello, World";
char const* buffer = s.c_str();

to do this in Managed C++, but it should get you to where you are
going.

C++/CLI, not Managed C++

Add these lines to get a Byte array.

cli::array<System::Byte>^ a = gcnew cli::array<System::Byte>(s.length());
int i = s.length();
while (i-- > 0)
a = buffer;

And then use Encoding::UTF8::GetString(a);
 
G

Giovanni Dicanio

I have a std::string which I know is UTF-8 encoded. How can I make a
System::String^ from it?
I tried UTF8Encoding class, but it wants a Byte array, and I don't
know how to get that from a std::string.

To add to what others have written, I think that you could also convert the
string from Unicode UTF-8 to Unicode UTF-16 inside C++, using
::MultiByteToWideChar Win32 API.
Then, you can pass the resulting Unicode UTF-16 string value to
System::String (so, in this way you bypass UTF8Encoding class).

Giovanni
 
B

barnum

Since you know that your string is UTF-8, you need only be worried
that chars are 8-bits wide.
std::string s = "Hello, World";
char const* buffer = s.c_str();
to do this in Managed C++, but it should get you to where you are
going.

C++/CLI, not Managed C++

Add these lines to get a Byte array.

cli::array<System::Byte>^ a = gcnew cli::array<System::Byte>(s.length());
int i = s.length();
while (i-- > 0)
a = buffer;

And then use Encoding::UTF8::GetString(a);




Outside of that I can't help you.- Skjul sitert tekst -

- Vis sitert tekst -- Skjul sitert tekst -

- Vis sitert tekst -


Thanks, that worked!
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top