Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby支持unicode吗?它是如何工作的?_Ruby_Unicode - Fatal编程技术网

Ruby支持unicode吗?它是如何工作的?

Ruby支持unicode吗?它是如何工作的?,ruby,unicode,Ruby,Unicode,我刚刚开始学习Ruby(最终转向RoR),但我刚刚听说Ruby不支持unicode。这是真的吗?Ruby程序员如何支持unicode 您听到的内容已经过时,并且(仅部分)适用于Ruby 1.8或之前的版本。Ruby的最新稳定版本(1.9),支持不少于95的不同字符编码(刚才我的系统中已计算在内)。这包括几乎所有已知的Unicode转换格式,包括UTF-8 Ruby(1.8)以前的稳定版本对UTF-8有部分支持 如果您使用Rails,它将为您提供默认的UTF-8编码。如果您只需要UTF-8编码感知

我刚刚开始学习Ruby(最终转向RoR),但我刚刚听说Ruby不支持unicode。这是真的吗?Ruby程序员如何支持unicode

您听到的内容已经过时,并且(仅部分)适用于Ruby 1.8或之前的版本。Ruby的最新稳定版本(1.9),支持不少于95的不同字符编码(刚才我的系统中已计算在内)。这包括几乎所有已知的Unicode转换格式,包括UTF-8

Ruby(1.8)以前的稳定版本对UTF-8有部分支持

如果您使用Rails,它将为您提供默认的UTF-8编码。如果您只需要UTF-8编码感知,那么无论您运行Ruby 1.9还是Ruby 1.8,Rails都将为您工作。如果您有非常具体的字符编码要求,那么应该以Ruby 1.9为目标


如果你真的感兴趣,这里有一个例子,描述Ruby1.8中的编码问题,以及它们是如何解决的,并最终在Ruby1.9中得到解决。Rails仍然为Ruby 1.8中的许多常见缺陷提供了解决方法。

事实并非如此。事实上,Ruby不仅支持Unicode,还支持大量其他编码

这与Java、.NET或Python等系统形成了对比,它们遵循“一种编码来统治所有人”的模型。Ruby拥有Ruby的m17n系统的设计者之一所称的“CSI”模型(代码集独立),这意味着不是所有字符串都有一个相同的编码,而是每个字符串都有自己的编码

这在易用性和性能方面都有一些显著的优势,因为这意味着如果输入和输出编码相同,则永远不需要转码,而对于一个真正的编码模型,在最坏的情况下需要转码两次(不幸的是,这种最糟糕的情况经常发生,因为大多数环境都选择了没有人真正使用的内部编码),从输入编码到内部编码,再到输出编码

OTE模型的基本问题是,无论您选择哪种编码作为真正的编码,它都将是完全任意的选择,因为没有一种编码是每个人,甚至大多数人都使用的


例如,在Java中,他们选择UCS-2作为一种真正的编码方式。然后,几年后,结果证明UCS-2实际上不足以编码所有字符,因此他们不得不对Java进行向后不兼容的更改,以切换到UTF-16作为一种真正的编码方式。除此之外,世界上很大一部分地区都在继续前进从UTF-16到UTF-8。如果Java是在几年前发明的,他们可能会选择ASCII作为一种真正的编码。如果它是在另一个国家发明的,它可能是Shift JIS。如果它是由另一家公司发明的,它可能是EBCDIC。它真的是完全任意的,不应该是如此重要的选择

在回答另一个问题时,一个人说他们在Ruby 1.9中处理unicode数据时遇到了Iconv问题,但我不能保证它的准确性。

在我的文件顶部添加以下行解决了这个问题

# encoding: utf-8

这是一个很老的问题。Ruby当前的稳定版本是2.0.1。是的,它可以处理大部分Unicode中的内容,但请注意,它很容易崩溃

看看这个代码示例和结果(灵感来自:


[“noẻl”,“@tchrist:它是一种编码,它为每个字符分配一个唯一的数字(这几乎是“编码”的字典定义)。它不是一种编码,它没有为每个字符分配唯一的位模式(用Unicode术语,这是传输格式的工作)。不幸的是,除了“编码”之外,我从来没有想到过Unicode是什么。Jörg:[#1]字符集是纯抽象字符的完整集合。[#2]编码字符集将这些抽象字符映射为非负整数,称为1:1关系中的代码点。[#3]字符编码函数(或表单)定义用于序列化这些整数代码点的精确位布局。通过查看比Unicode更小的指令集,这可能更容易理解。基数-50有一个50个字符的指令集,包含两个不同的编码字符集(PDP-11之前和之后)其代码点一次将3个压缩为16位字。(续…(…续)根据定义1,Unicode是一个包含抽象字符的指令集,例如带宏字符的拉丁大写字母AE、德语便士符号和带圆圈的WZ。根据定义2,这3个抽象字符分别被分配代码点1E2₁₆, 20B0₁₆, 和1F12E₁₆. 3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、8、8、8、8、8、8、3、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、8、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3、3基数-50有一个50₈ 角色剧目,40集₁₀.@Jörg:你忘了提到Perl。它的模型比Java的更干净,因为它使用逻辑代码点(def#2)而不是序列化代码点(def#3),就像Java和Python一样,这是不明智的。但是,是的,一切都规范化为Unicode指令集(def#1)我还没有看到任何合理的论证,为什么你会想要外星人,非Unicode的代码点,或者把每一个字符串的原始序列化和它一起永远保存下去。我认为它是一个严重的缺陷,Ruby这样做,不是任何一种可取的特征。它也暗示了对巨大的“私人使用”的误解。Unicode.com的一节。适用于像我这样的人,为prog寻找$KCODE等价物的快捷方式