Преобразование Unicode к многобайтовому

Существует полный набор инструкции по MSDN также. Необходимо считать их хорошо, это и хитро и важно.

Несколько точек я нашел самым полезным:

  • Типы Значения не имеют Идентификационных данных, таким образом, в struct Point Вы будете обычно делать, участник участником выдерживает сравнение.

  • Ссылочные типы обычно имеют идентификационные данные, и поэтому Равняется тесту, обычно останавливается в ReferenceEquals (значение по умолчанию, никакая потребность переопределить). Но существуют исключения, как строка и Ваш class Point2 , где объект не имеет никаких полезных идентификационных данных, и затем Вы переопределяете участников Равенства для обеспечения собственной семантики. В той ситуации следуйте инструкциям для прохода через пустой указатель и случаи другого-типа сначала.

  • И существуют серьезные основания сохранить GethashCode() и operator== в синхронизации также.

5
задан subbu 6 October 2009 в 13:05
поделиться

6 ответов

std::string NarrowString(const std::wstring& str, const char* localeName = "C")
{
  std::string result;
  result.resize(str.size());

  std::locale loc(localeName);

  std::use_facet<std::ctype<wchar_t> >(loc).narrow(
    str.c_str(), str.c_str() + str.size(), '?',  &*result.begin());

  return result;
}

Он должен использовать текущий языковой стандарт для преобразования строки Unicode. Для символов, которые не входят в кодовую страницу, знак "?" caracter используется. Протестировано с Visual C ++ 2005/2008.

7
ответ дан 18 December 2019 в 10:46
поделиться

Три варианта навскидку:

5
ответ дан 18 December 2019 в 10:46
поделиться

wcstombs прекрасно работает для меня :)

3
ответ дан 18 December 2019 в 10:46
поделиться

В большинстве случаев будет достаточно WideCharToMultiByte ().

1
ответ дан 18 December 2019 в 10:46
поделиться

Есть WideCharToMultiByte функция winapi.

0
ответ дан 18 December 2019 в 10:46
поделиться

используйте WideCharToMultiByte

0
ответ дан 18 December 2019 в 10:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: