现在有哪些选项可以在Ruby和RoR中实现UTF8?

时间:2008-10-01 22:16:28

标签: ruby utf-8 internationalization

在Ruby的开发非常密切之后,我了解到在Ruby 1.9中实现了详细的字符编码。我现在的问题是:目前如何使用Ruby与以UTF8存储所有数据的数据库进行对话?

背景:我参与了一个新项目,其中Ruby / RoR至少是一个选项。但该项目需要依赖于国际化的字符集(它遍布许多国家),最好是UTF8。

那你怎么处理那个?提前谢谢。

3 个答案:

答案 0 :(得分:1)

Ruby 1.8可以与UTF-8字符串一起使用,以便对字符串进行基本操作。根据您的应用程序的需要,某些操作将无法正常工作或无法正常工作。

例如:

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

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

3)如果在Ruby中排序,排序顺序将是时髦的。使用数据库进行排序的建议是一个好主意。

等。

关于从数据库读取数据后排序数据的评论:如上所述,结果可能无法满足用户的期望。所以解决方案是对db进行排序。无论如何,它通常会更快 - 数据库旨在对数据进行排序。

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

此致

拉​​里

答案 1 :(得分:1)

“Unicode啊!虽然Rails总是能够存储和显示没有牛肉的unicode,但截断,反转或获得UTF-8字符串的确切长度要复杂一点。你需要傻瓜与KCODE本人一样,虽然很多人都让它发挥作用,但它并不像你希望的那样容易(甚至可能是预期的)。

因为Ruby直到明年这个时候才会出现多字节知识,因此Rails 1.2引入了ActiveSupport :: Multibyte来处理Unicode字符串。调用字符串上的chars方法开始处理字符而不是字节。“Click Here for more

答案 2 :(得分:0)

虽然我还没有对它进行测试,但是字符编码库(目前处于alpha版本)会向String类添加方法来处理UTF-8等。它在RubyForge上的页面是here。它专为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应用程序中操作数据的程度是多少?大多数排序等通常由您的数据库引擎完成。