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

Шутка старая, но "чтоб не забыть" :)



Поделитесь своим мнением


Я не робот.