5

Following the development of Ruby very closely I learned that detailed character encoding is implemented in Ruby 1.9. My question for now is: How may Ruby be used at the moment to talk to a database that stores all data in UTF8?

Background: I am involved in a new project where Ruby/RoR is at least an option. But the project needs to rely on an internationalized character set (it's spread over many countries), preferably UTF8.

So how do you deal with that? Thanks in advance.

4

3 回答 3

1

Ruby 1.8 可以很好地处理 UTF-8 字符串,以便对字符串进行基本操作。根据您的应用程序的需要,某些操作将无法正常工作或无法按预期工作。

例如:

1)字符串的大小会给你字节,而不是字符,因为还没有多字节支持。但是您需要知道字符串的字符大小吗?

2) 不在字符边界处拆分字符串。但是你需要这个吗?等等。

3) 如果在 Ruby 中排序,排序顺序会很时髦。使用 db 进行排序的建议是个好主意。

等等

重新发布从 db 读取数据后对数据进行排序的评论:如前所述,结果可能与用户的期望不符。所以解决方案是对数据库进行排序。无论如何,它通常会更快——数据库旨在对数据进行排序。

简介:我的 Ruby 1.8.6 RoR 应用程序可以在现代浏览器上处理和存储为 UTF-8 的国际 Unicode 字符正常工作。从右到左的语言也可以正常工作。主要问题:确保您的数据库和所有网页都设置为使用 UTF-8。如果您的数据库中已经有一些数据,那么您需要通过转换过程将其更改为 UTF-8。

问候,

拉里

于 2009-05-10T02:49:37.543 回答
1

“Unicode 哎呀!虽然 Rails 一直能够存储和显示 unicode,但截断、反转或获取 UTF-8 字符串的确切长度有点复杂。你需要自己玩弄 KCODE虽然很多人让它工作,但它并不像你希望的那样容易(甚至可能是预期的)。

因此,由于 Ruby 直到明年这个时候才会支持多字节,Rails 1.2 引入了 ActiveSupport::Multibyte 来处理 Unicode 字符串。调用字符串上的 chars 方法以开始使用字符而不是字节。”单击此处了解更多信息

于 2009-05-10T03:09:54.563 回答
0

虽然我还没有测试过,但是字符编码库(目前是 alpha 版本)向 String 类添加了处理 UTF-8 和其他字符的方法。它在 RubyForge 上的页面在这里。它是为 Ruby 1.8 设计的。

然而,根据我的经验,使用 Ruby 1.8,如果您将数据以 UTF-8 格式存储在数据库中,只要 HTTP 标头中的字符编码是 UTF-8,Ruby 就不会妨碍您。它可能无法对琴弦进行操作,但它不会破坏任何东西。例子:

file.txt:
¡Hola! ¿Como estás? Leí el artículo. ¡Fue muy excellente!

原谅我可怜的西班牙语;这是我能想到的最好的 Unicode 例子。

in irb:
str = File.read("file.txt")
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\n"
str += "Foo is equal to bar."
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."
str = "    " + str + "    "
   => "    \302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar.    "
str.strip
   => "\302\241Hola! \302\277Como est\303\241s? Le\303\255 el art\303\255culo. \302\241Fue muy excellente!\nFoo is equal to bar."

基本上,它只会将 UTF-8 视为带有奇数字符的 ASCII。如果代码点乱序,它不会按字典顺序排序;但是,它将按代码点排序。例子:

"\302" <=> "\301"
   => -1

无论如何,您打算对 Rails 应用程序中的数据进行多少操作?大多数排序等通常由您的数据库引擎完成。

于 2008-10-02T00:28:54.917 回答