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

为什么Ruby 1.9中具有相同字节和编码的两个字符串不相同?

发布时间:2020-12-17 03:58:29 所属栏目:百科 来源:网络整理
导读:在 Ruby 1.9.2中,我找到了一种方法来制作两个具有相同字节,相同编码和相同的字符串,但它们具有不同的长度和[]返回的不同字符. 这是一个错误吗?如果它不是一个bug,那么我想完全理解它. Ruby 1.9.2 String对象中存储了哪些信息,允许这两个字符串表现不同? 下
在 Ruby 1.9.2中,我找到了一种方法来制作两个具有相同字节,相同编码和相同的字符串,但它们具有不同的长度和[]返回的不同字符.

这是一个错误吗?如果它不是一个bug,那么我想完全理解它. Ruby 1.9.2 String对象中存储了哪些信息,允许这两个字符串表现不同?

下面是重现此行为的代码.以#=>开头的评论显示我从这个脚本得到的输出,括号中的单词告诉你我对该输出的判断.

#!/usr/bin/ruby1.9
# coding: utf-8
string1 = "xC2xA2"       # A well-behaved string with one character (¢)
string2 = "".concat(0xA2)  # A bizarre string very similar to string1.
p    string1.bytes.to_a    #=> [194,162]  (good)
p    string2.bytes.to_a    #=> [194,162]  (good)
puts string1.encoding.name #=> UTF-8  (good)
puts string2.encoding.name #=> UTF-8  (good)
puts string1 == string2    #=> true   (good)
puts string1.length        #=> 1      (good)
puts string2.length        #=> 2      (weird!)
p    string1[0]            #=> "¢"    (good)
p    string2[0]            #=> "xC2" (weird!)

我正在运行Ubuntu并从源代码编译Ruby.我的Ruby版本是:

ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

解决方法

这是Ruby的错误并修复了 r29848.

(编辑:李大同)

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

    推荐文章
      热点阅读