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

标签 ruby string encoding ruby-1.9

在 Ruby 1.9.2 中,我找到了一种方法让两个字符串具有相同的字节、相同的编码并且相等,但是它们有不同的 length。和 [] 返回的不同字符.

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

下面是重现此行为的代码。 #=>开头的评论向您展示我从该脚本中获得的输出,括号中的词语告诉您我对该输出的判断。

#!/usr/bin/ruby1.9
# coding: utf-8
string1 = "\xC2\xA2"       # 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 .

关于ruby - 为什么在 Ruby 1.9 中两个具有相同字节和编码的字符串不相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4236793/

相关文章:

ios - 在 iOS 计算器上创建退格键

python - python 字符串中的多个字符替换

ruby - 从字符串中删除所有非大写字母单词正则表达式rails

ruby - OpenSSL key 长度在 Ruby 中太短,在 Bash 中则不然

ruby - Debian Packagemanager 在构建 docker 镜像时不会在 alpine-linux 上安装 vagrant.deb 包

r - 在 R 中快速计算字符串中的数字

java - 对 URL 中的数据进行编码以实现高效传输

encoding - 如何使用 ffmpeg h265 压缩 h265 视频?

objective-c - NSData 编码为 Unicode 返回 nil

Ruby-初学者遇到未知语法