Member 12677926 Ответов: 1

К верхнему выпуску для символов, отличных от английского


to upper не работает для еврейских символов .

эта функция описана ниже :

стритем.SetAt(0, :: toupper(strItem[0]));

давая некоторые символы .пожалуйста, дайте мне знать о проблеме.

Что я уже пробовал:

if ( lpszItem && *lpszItem )
	{
		strItem = lpszItem;

		if ( m_bUpper1st )
		{

			if ( *lpszItem == _T('~') || *lpszItem == _T('*') )
				strItem.SetAt(1, ::toupper(strItem[1]));
			else
			{
				//int i = ::toupper(strItem[0]);
				strItem.SetAt(0, ::toupper(strItem[0]));
				///strItem.MakeUpper();
				//strItem.Trim();
			}	
		}
	}

1 Ответов

Рейтинг:
0

Jochen Arndt

Существует две версии toupper:
Версия библиотеки C toupper-ссылка на C++ [^] и версия C++ toupper-ссылка на C++ [^] (не путайте с идентичным названием ссылки).
Оба поддерживают указание локали, которая будет использоваться для преобразования.

Локаль библиотеки C по умолчанию - "C", которая является ASCII и может быть изменена с помощью setlocale-ссылка на C++ [^Но обратите внимание, что это влияет на все функции библиотеки Си.

Для локали библиотеки C++ см. язык - Справочник по c++ [^].

Но вы используете Windows и Unicode build dependant T строки.
Для тех, кто использует соответствующие _t функции (здесь _totupper; видеть toupper, _toupper, towupper, _toupper_l, _towupper_l[^] ).
Но опять же вы должны сначала установить локаль (см. Место действия[^] и setlocale, _wsetlocale[^]).

Попробовать это:

// Once on top of function / thread / process
// "" is user default ANSI code page
// ".ACP" is system ANSI code page
// ".<cp>" is code page number; e.g. ".1255"
setlocale(LC_ALL, "");
// ...
strItem.SetAt(0, _totupper(strItem[0]));</cp>