【问题标题】:Rails, Alphabet range ('a'..'z') for non-English charactersRails,非英文字符的字母范围('a'..'z')
【发布时间】:2015-09-03 17:37:27
【问题描述】:

('a'..'z') 和其他范围 methods 文字非常方便。

是否有等效或某种其他范围方法来显示英语以外的字母? (exempli gratia 德国字母(变音符号),土耳其字母)

更新
我的用例是:
我正在从字母中生成随机字符串。所以我需要字母表中的所有字符,然后才能以指定的长度随机化和重新加入它们。用英语,我可以:('a'..'z').to_a.shuffle[0, length].join.capitalize。我也想对其他字母做同样的事情。

【问题讨论】:

  • 那不是一种方法。它是一个范围文字。
  • 请注意,Ruby 中的字符排序基于 ASCII 码。即使考虑扩展 ASCII 码,元音变音字符也不与英文字母相邻,所以我认为它没有用。
  • @sawa on codepoints,准确地说,不是在 ASCII 上。 ('а'..'я') 也可以。
  • @mudasobwa 感谢您的纠正。我确实尊重俄罗斯人。

标签: ruby-on-rails ruby


【解决方案1】:

这样不行。实际上,例如“o umlaut”没有确定的字符。看:

▶ 'ö'.codepoints
#⇒ [
#  [0] 246
# ]
▶ 'ö'.codepoints
#⇒ [
#  [0] 111,
#  [1] 776
# ]

很酷吧?原因是前者是来自ISO-8859-1的字符,而后者是“o”+combining diacritics。我建议要么使用绑定到icu library,要么尝试手动处理所有内容(导致错误和不受支持的代码库。)

UPD 正如@NeilSlater 在他的评论中指出的那样,一旦不可能结合变音符号,人们可能会这样写:

[*('a'..'z'), 'ö', 'ä', 'ü']

【讨论】:

  • 如果解释了 OP 的用例,答案可能会有所不同。例如,如果 OP 从一组字符生成内容,则单独的变音符号可能不是问题。
  • 更准确地说,两者都是utf-8,但前者是字符的NFC形式,后者是ö的NFD形式。但是,是的,unicode 字符的代码点与 latin-1 相同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 2021-08-27
  • 2017-11-21
  • 1970-01-01
  • 2011-08-22
相关资源
最近更新 更多