Преобразование строк в Unicode и наоборот

Я как бы новичок в использовании строк и указателей Unicode, и я не знаю, как работает преобразование в unicode в ascii и versa-versa. Следующее - это то, что я пытаюсь сделать,

const wchar_t *p = L"This is a string";

Если бы я хотел преобразовать его в char*, как бы преобразование работало с преобразованием wchar_t* в char* и наоборот?

или по значению с использованием объекта класса wstring to string и наоборот

std::wstring wstr = L"This is a string";

Если я прав, можете ли вы просто скопировать строку в новый буфер без преобразования?

Ответы

Ответ 2

В будущем (VS 2010 уже поддерживает это) это будет возможно в стандарте C++ (наконец-то!):

#include <string>
#include <locale>

std::wstring_convert<std::codecvt_utf8<wchar_t>> converter;
const std::wstring wide_string = L"This is a string";
const std::string utf8_string = converter.to_bytes(wide_string);

Ответ 3

С++ сам по себе не предлагает эту функциональность. Вам понадобится отдельная библиотека, например libiconv.

Ответ 4

C Стандартные функции библиотеки: mbstowcs и wcstombs

Ответ 5

Преобразование из ASCII в Unicode и наоборот довольно тривиально. По дизайну первые 128 значений Unicode совпадают с ASCII (фактически, первые 256 равны ISO-8859-1).

Итак, следующий код работает в системах, где char - ASCII, а wchar_t - Unicode:

const char* ASCII = "Hello, world";
std::wstring Unicode(ASCII, ASCII+strlen(ASCII));

Вы не можете отменить это просто: 汉 существует в Юникоде, но не в ASCII, так как бы вы его "конвертировали"?

Ответ 6

Алгоритм widen() преобразует char в wchar_t:

char a;
a = 'a';
whcar_t wa = cin.widen(a);

Конечно, вы должны положить его в цикл. И разрешите *; Противоположность достигается narrow()