Я использую Borland C++ Builder 2009, и мое приложение переведено на несколько языков, включая польский.C++ towupper() не конвертирует определенные символы
Для небольшой части функциональности я использую towuppper(), чтобы использовать строку, чтобы подчеркнуть ее при первом игнорировании пользователем.
Исходная строка загружается из библиотеки DLL языка, в объект utf16 wstring и преобразовать так:
int length = mystring.length() ;
for (int x = 0 ; x < length ; x++)
{
mystring[x] = towupper(mystring[x]);
}
Все это работает хорошо, для Польши, где следующее предложение, кроме: «Rozumiem ryzykowność wykonania тедж operacji»превращается в "ROZUMIEM RYZYKOWNO СБН WYKONANIA TEJ oPERACJI" вместо "ROZUMIEM RYZYKOWNO СБН WYKONANIA TEJ oPERACJI"
(уведомление о том, что два последних символов слова "ryzykowność" не конвертировать).
Это не так, как если бы у этого символа не было никаких заглавных вариантов Юникода. Символ Юникода 346 делает трюк. http://www.fileformat.info/info/unicode/char/015a/index.htm
Является ли это устаревшей библиотекой в устаревшей установке компилятора или мне не хватает чего-то еще?
Являются ли эти символы нормализованными или состоят из нескольких комбинированных блоков кода? – user2079303
Это не должно быть устаревшей библиотекой, так как «ś» и «Ś» присутствовали в Unicode v.1.1 от 1993 года.Если это так, это ошибка создателя этой функции. – usr2564301
Какова ваша локаль языка C? «Верхняя версия ch или unmodified ch, если ни одна версия в верхнем регистре не указана в текущей языковой версии C». Вы находитесь в юникодном локали? 'std :: setlocale (LC_ALL," en_US.utf8 ");'? Из http://en.cppreference.com/w/cpp/string/wide/towupper можно легко прочитать документы о функции, найденной через google. Если это не решит проблему, предоставьте [mcve] – Yakk