比较特殊字符中具有不同字节的utf-8字符串

时间:2014-02-18 11:53:54

标签: ruby string character-encoding

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”

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

1 个答案:

答案 0 :(得分: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?