【问题标题】:Comparing utf-8 string that have different byte in special characters比较特殊字符中具有不同字节的 utf-8 字符串
【发布时间】:2014-03-18 03:48:24
【问题描述】:

SomeObject.find(20).client.full_name.downcase.bytes.each{|b|放 b}

  • 98 197 130 97 197 188 101 106 101 119 115

=> "błażejewsk" OtherClass.find(36).client.downcase.bytes.each {|b|放 b}

  • 98 197 129 97 197 187 101 106 101 119 115

=> "bŁaŻejewsk"

如您所见,特殊字符在两个字符串中都有不同的字节。 两个字符串都有 Encoding:UTF-8,所以 force_encoding 或类似的东西,都无济于事。 == 返回错误。我应该如何转换这些字符串,以便从比较中得到真实的结果?

【问题讨论】:

  • 我不明白,你想避免什么?
  • 请努力提高您的帖子质量。问题是什么?
  • @toro2k 我猜 130129..
  • 这可能是关于 Unicode 中不区分大小写的字符串比较。

标签: ruby string character-encoding


【解决方案1】:

它不适用于downcase,请参阅http://www.ruby-doc.org/core-2.1.0/String.html#method-i-downcase-21

返回 str 的副本,其中所有大写字母都替换为对应的小写字母。该操作不区分区域设置——只有字符“A”到“Z”受到影响。注意:大小写替换仅在 ASCII 区域有效。

查看此问题以正确小写 UTF-8 字符串 Ruby 1.9: how can I properly upcase & downcase multibyte strings?

【讨论】:

  • 我会从你粘贴的帖子中给出的链接中尝试 gem。现在我只是通过比较没有所有非ASCII数字的字符串来做到这一点。
猜你喜欢
  • 2013-01-17
  • 2012-12-04
  • 2021-11-03
  • 2019-09-21
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 2015-07-15
  • 1970-01-01
相关资源
最近更新 更多