Как вы преобразуете регистр символов в UNIX точно? (при условии i18N) - PullRequest
2 голосов
/ 04 июня 2009

Я пытаюсь понять, как точно манипулировать символами и наборами символов в UNIX, учитывая наличие различных локалей - и делаю это, не требуя специальных инструментов вне стандартных элементов UNIX.

Мое исследование показало мне проблему немецкого характера: один персонаж превращается в два - и другие проблемы. Использование tr, по-видимому, очень плохая идея. Единственная альтернатива, которую я вижу, это:

echo StUfF | perl -n -e "print lc($_);"

но я не уверен, что это сработает, и для этого нужен Perl - не плохое требование обязательно, но очень большой молоток ...

А как насчет awk, grep, sed и ...? В этом и заключается мой вопрос: как я могу быть уверен, что текст будет в нижнем регистре в каждой локали?

Ответы [ 2 ]

2 голосов
/ 04 июня 2009

Perl lc / uc отлично работает для большинства языков, но он не будет корректно работать с турецким, см. мой отчет об ошибке для получения подробной информации. Но если вам не нужно беспокоиться о турецком языке, Perl хорош.

0 голосов
/ 12 сентября 2010

Вы не можете быть уверены, что текст будет правильным во всех локалях. Это невозможно, в библиотеках программного обеспечения всегда возникают ошибки, связанные с реализацией персонала, связанного с i18n.

Если вы не боитесь использовать C ++ или Java, вы можете взглянуть на ICU , которые реализуют широкий набор правил сопоставления, нормализации и т. Д.

...