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

Geo*_*rgi 5 ruby utf-8 internationalization

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

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

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

A. *_*row 0

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

\n\n

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

\n\n
file.txt:\n\xc2\xa1Hola! \xc2\xbfComo est\xc3\xa1s? Le\xc3\xad el art\xc3\xadculo. \xc2\xa1Fue muy excellente!\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

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

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

\n\n
"\\302" <=> "\\301"\n   => -1\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n