加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 相同的字符串但不同的字节代码

发布时间:2020-12-16 19:25:22 所属栏目:百科 来源:网络整理
导读:我有两个字符串: a = 'ha? n??i'b = 'hà n?i' 当我将它们与== b进行比较时,它返回false. 我检查了字节码: a.bytes = [104,97,204,128,32,110,195,180,163,105]b.bytes = [104,160,225,187,153,105] 原因是什么?如何修复它以使a == b返回true? 解决方法
我有两个字符串:
a = 'ha? n??i'
b = 'hà n?i'

当我将它们与== b进行比较时,它返回false.

我检查了字节码:

a.bytes = [104,97,204,128,32,110,195,180,163,105]
b.bytes = [104,160,225,187,153,105]

原因是什么?如何修复它以使a == b返回true?

解决方法

这是 Unicode equivalence的问题.

为了比较这些字符串,您需要对它们进行标准化,以便它们对这些类型的字符使用相同的字节序列.

a.unicode_normalize == b.unicode_normalize

unicode_normalize(form =:nfc)[link]

Returns a normalized form of str,using Unicode normalizations NFC,
NFD,NFKC,or NFKD. The normalization form used is determined by form,
which is any of the four values :nfc,:nfd,:nfkc,or :nfkd. The
default is :nfc.

If the string is not in a Unicode Encoding,then an Exception is raised. In this context,‘Unicode Encoding’ means any of UTF-8,UTF-16BE/LE,and UTF-32BE/LE,as well as GB18030,UCS_2BE,and UCS_4BE. Anything else than UTF-8 is implemented by converting to UTF-8,which makes it slower than UTF-8.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读