strcase и русский язык
Известно, что strcase преобразовывает регистр символов (либо все в верхний, либо все в нижний). Точнее, так задумывалось.
Как выяснилось, в реальной жизни ситуация немного иная:
1 2 3 4 5 6 7 8 | (strcase "abcdefghijklmnopqrtuvwxyz") ; "ABCDEFGHIJKLMNOPQRTUVWXYZ" (strcase "abcdefghijklmnopqrtuvwxyz" t) ; "abcdefghijklmnopqrtuvwxyz" (strcase "ABCDEFGHIJKLMNOPQRTUVWXYZ") ; "ABCDEFGHIJKLMNOPQRTUVWXYZ" (strcase "ABCDEFGHIJKLMNOPQRTUVWXYZ" t) ; "abcdefghijklmnopqrtuvwxyz" (strcase "абвгдеёжзийклмнопрстуфхцчшщъыьэюя") ; "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" (strcase "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" t) ; "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" (strcase "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ") ; "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" (strcase "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" t) ; "абвгдеЁжзийклмнопрстуфхцЧшщъыьэюЯ" |
Как видно, при преобразовании русских символов из верхнего регистра в нижний можно получить очень интересный результат. Пришлось писать свою обработку на лиспе (можно, конечно, и на C#, но лениво):
1 2 3 4 5 6 7 8 9 10 11 | (defun _kpblc-strcase (str) ;| * Переводит строку в нижний регистр * Параметры вызова: str обрабатываемая строка * Примеры вызова: (_kpblc-strcase "ПРОЧИЕ") ; "прочие" |; (strcase (vl-string-translate "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ" "абвгдеёжзийклмнопрстуфхцчшщъыьэюя" str) t ) ;_ end of strcase ) ;_ end of defun |
Шутка старая, но "чтоб не забыть"