我有一串特殊字符的string。 这工作:
myString.upcase.tr('æ-ý','Æ-Ý')
但是,这并不是真正的跨平台。 在Windows上我的Ruby实现不会这样(在我的Mac和Linux机器上,就像一个魅力)。 任何指针/解决方法/解决scheme,真的很感激!
在c#windows应用程序中find打开的窗体
框架的CSS“Windows 95”像
如何从命令行检测64位Java?
如何使UWPcordova应用程序图标背景匹配Windows主题
Windows / Python错误WindowsError:系统找不到指定的path
不幸的是,在不知道语言的情况下正确地提升/缩小字符串是不可能的,在某些情况下,甚至字符串的内容也是不可能的。
例如,在英文中, i的大写变体是I , I的小写变体是i ,但是在土耳其语中, i的大写变体是İ , I的小写变体是ı 。 在德语中, ß的大写变体是SS ,但是ss的大写变体也是如此,所以对于文本,您需要理解文本,因为例如MASSE可以降低为masse (mass)或maße ( maße (度量)。
Ruby使用简单的方法,只需要在ASCII字母表中输入大写/小写。
然而,这只能解释为什么你的解决方法是必要的 ,而不是为什么它有时工作,有时不。 假设您在所有平台上使用相同的Ruby版本和相同的Ruby实现和相同版本的实现,它应该可以工作。 YARV不会使用底层平台的字符串操作例程(对于大多数Ruby实现也是这样,事实上,即使JRuby不使用Java的强大的字符串库,但为了最大程度的兼容性而自行设计),而且它也不使用除了Onigmo之外的任何第三方库(比如ICU),所以平台的差异不太可能被指责。 不同版本的Ruby使用不同版本的Unicode字符数据库,但是(例如我相信它至少在1.9到2.2之间更新了一次),所以如果你有一个版本不匹配,那么可能会解释它。
或者,这可能是Windows上YARV的一个真正的bug。 也许尝试JRuby? 它在平台之间往往更加一致,事实上,在Windows上,它比Ruby(即YARV)本身更兼容Ruby!
如果您使用Rails> = 3,请尝试mb_chars方法。 例如,
'æ-ý'.mb_chars.upcase => "Æ-Ý"
如果您不使用Rails,请尝试unicode gem。
Unicode::upcase('æ-ý')
或者你也可以重写String类的方法:
require "unicode"; class String def downcase Unicode::downcase(self) end def downcase! self.replace downcase end def upcase Unicode::upcase(self) end def upcase! self.replace upcase end def capitalize Unicode::capitalize(self) end def capitalize! self.replace capitalize end end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。