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

在密切关注Ruby的开发之后,我了解到在Ruby 1.9中实现了详细的字符编码。 我现在的问题是:如何使用Ruby来与存储UTF8中所有数据的数据库进行通信?

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

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

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

例如:

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

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

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

等等

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

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

问候,

拉里

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

因此,直到明年这个时候Ruby才会出现多字节识别,因此Rails 1.2引入了ActiveSupport :: Multibyte来处理Unicode字符串。 调用字符串上的chars方法开始处理字符而不是字节。“ 点击这里了解更多信息

虽然我还没有对它进行测试,但字符编码库(目前处于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! 

请原谅我可怜的西class牙人; 这是我能想到的最好的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应用程序中的数据进行操作多少? 大多数排序等通常由您的数据库引擎完成。