Если вы знаете, что arrWords[i]
содержит кодированный текст UTF-8, вам, вероятно, нужно разбить строки на полные символы Юникода.
Как и в стороне, а не говорить:
this->hElemanlar.push_back(std::string(1, this->arrWords[sayKelime][j]).c_str());
(который создает временную зЬй :: строки, получает с-строковым представлением этого, строит другую временной строки, и толкает, что на вектор), например:
this->hElemanlar.push_back(std::string(1, this->arrWords[sayKelime][j]))
В любом случае. Это нужно, чтобы стать что-то вроде:
std::string str(1, this-arrWords[sayKelime][j])
if (static_cast<unsigned char>(str[0]) >= 0xC0)
{
for (const char c = this-arrWords[sayKelime][j+1];
static_cast<unsigned char>(c) >= 0x80;
j++)
{
str.push_back(c);
}
}
this->hElemenlar.push_back(str);
Обратите внимание, что выше петля является безопасным, потому что если j
является индекс последнего символа в строке, [j+1]
возвращает NUL-терминатор (который закончится цикл). Вам нужно будет рассмотреть, как приращение j взаимодействует с остальной частью вашего кода.
Вам необходимо подумать, хотите ли вы, чтобы hElemanlar
представлял отдельные кодовые точки Юникода (что это делает), или вы хотите включить символ + все последующие символы? В последнем случае вам придется расширить код выше:
- Разбираем следующий код точку
- Определите, является ли это сочетание символов
- Нажмите последовательность UTF-8 на строку, если так.
- Повторите (вы можете иметь несколько комбинирующих символов для символа).
Мы не можем помочь, когда ваш оператор проблемы просто _ «некоторые символы utf-8 не печатаются и не обрабатываются» _ –
Уверен, что для «теста» нет проблем. Можете ли вы показать некоторую строку, которая имеет проблему? –
@LightnessRacesinOrbit хорошо, проблема в том, что некоторые символы utf-8 не печатаются и не обрабатываются хорошо. – gokturk