UNIX下如何准确转换字符大小写? (假设 i18N)
我试图了解如何在存在不同语言环境的情况下准确地操作 UNIX 中的字符和字符集,并且这样做不需要 UNIX 标准项目之外的特殊工具。
我的研究向我展示了德语升号 s 字符的问题:一个字符变成两个字符 - 以及其他问题。 使用 tr 显然是一个非常糟糕的主意。 我看到的唯一选择是这样的:
echo StUfF | perl -n -e "print lc($_);"
但我不确定这是否可行,并且它需要 Perl - 不一定是一个坏要求,但一个非常大的锤子......
awk 和 grep 和 sed 和......怎么样? 这或多或少是我的问题:我如何确保文本在每个区域设置中都是小写的?
I'm trying to get a feel for how to manipulate characters and character sets in UNIX accurately given the existance of differing locales - and doing so without requiring special tools outside of UNIX standard items.
My research has shown me the problem of the German sharp-s character: one character changes into two - and other problems. Using tr is apparently a very bad idea. The only alternative I see is this:
echo StUfF | perl -n -e "print lc($_);"
but I'm not certain that will work, and it requires Perl - not a bad requirement necessarily, but a very big hammer...
What about awk and grep and sed and ...? That, more or less, is my question: how can I be sure that text will be lower-cased in every locale?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Perl lc/uc 适用于大多数语言,但无法正确处理土耳其语,请参阅 我的这个错误报告了解详细信息。 但如果您不需要担心土耳其语,那么 Perl 是不错的选择。
Perl lc/uc works fine for most languages but it won't work with Turkish correctly, see this bug report of mine for details. But if you don't need to worry about Turkish, Perl is good to go.
您无法确定文本在每个区域设置中都是正确的。 这是不可能的,关于i18n相关人员的实现,软件库中总是存在一些错误。
如果你不害怕使用 C++ 或 Java,你可以看看 ICU ,它实现了广泛的整理、标准化等规则。
You can't be sure that text will be correct in every locale. That's not possible, there are always some errors in software libraries regarding implementation of i18n related staff.
If you're not afraid of using C++ or Java, you may take a look at ICU which implement broad set of collation, normalization, etc. rules.