QString
всегда может содержать Unicode;LPCSTR
никогда не бывает Unicode.Это означает, что вам нужно подумать, что делать с персонажами, которые не подходят.Это не вопрос «какой метод использовать», а вопрос разработки.
Вполне возможно, что в вашем конкретном случае вы абсолютно точно знаете, что QString
содержит только символы из вашего локального «ANSI»кодовая страница (также известная как ACP
).В этом случае правильная функция - QString::toLocal8Bit ()
.
. В качестве альтернативы вы можете знать, что QString
содержит только символы из Latin1 (ISO 8859-1).В этом случае правильная функция - QString::toLatin1()
.
. Вы можете попытаться вызвать QString::toUtf8()
.Это всегда будет создавать действительный байтовый массив, даже если QString
содержал все символы Unicode.Однако формально вы не можете указать на него LPCSTR
: UTF-8 не является допустимой кодовой страницей ACP
.И, по-видимому, вы хотите, чтобы этот LPCSTR
передавался другой функции вне вашего контроля.Вполне вероятно, что функция не будет ожидать UTF-8.Если бы он ожидал Unicode вообще, это заняло бы LPCWSTR
.