2015-12-23 4 views
-1
std::string arrWords[10]; 
std::vector<std::string> hElemanlar; 

......станд :: строка кодировки символов

this->hElemanlar.push_back(std::string(1, this->arrWords[sayKelime][j]).c_str()); 

......

Что я делаю это: Каждый элемент arrWord является станд :: строка. Я получаю n-й элемент arrWord, а затем вставляю их в hlemanlar.

Предполагая, что arrWords [0] является «тест», то:

this->hElemanlar.push_back("t"); 
this->hElemanlar.push_back("e"); 
this->hElemanlar.push_back("s"); 
this->hElemanlar.push_back("t"); 

И моя проблема, хотя у меня нет проблем с кодировкой с arrWords, некоторые UTF-8 символов не напечатанных или обработанных хорошо hElemanlar. Как это исправить?

+0

Мы не можем помочь, когда ваш оператор проблемы просто _ «некоторые символы utf-8 не печатаются и не обрабатываются» _ –

+0

Уверен, что для «теста» нет проблем. Можете ли вы показать некоторую строку, которая имеет проблему? –

+0

@LightnessRacesinOrbit хорошо, проблема в том, что некоторые символы utf-8 не печатаются и не обрабатываются хорошо. – gokturk

ответ

1

Если вы знаете, что 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 на строку, если так.
  • Повторите (вы можете иметь несколько комбинирующих символов для символа).
+0

К сожалению, он рушится. – gokturk

Смежные вопросы