繁体   English   中英

Rails 2.3.2 / Ruby 1.8.6编码问题-ActionController返回UTF-8吗?

[英]Rails 2.3.2/Ruby 1.8.6 Encoding Question - ActionController returning UTF-8?

我有一个关于编码的非常简单的Rails问题,我找不到答案。

环境:Rails 2.3.2 / Ruby1.8.6

我目前未在Rails环境中设置任何编码选项,将所有内容保留为默认值。

如果我从磁盘上从文本文件中读取一个字符串,然后使用Apache / Phusion通过Rails render:text功能发送它,那么客户端应该期望哪种编码?

谢谢您的回答,

从Rails 1.2开始,Rails将Ruby 1.8的$ KCODE魔术变量设置为“ UTF8”。 它包括ActiveSupport :: CoreExtensions :: String :: Multibyte,用于解决按字符/按字节运算符不明确的问题。 您的文本文件应为UTF-8,Ruby将通过它,并且您的应用程序布局应指定一个META标记,也将文档的字符集也声明为UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

然后一切都应该“正常工作”,但是下面描述了一些陷阱。

如果您使用的是Mac,请在Terminal.app中运行“脚本/控制台”,然后从“角色查看器”直接将异常字符序列直接粘贴到终端中,这是一个很好的方法,可以演示并让您自己满意,因为整个操作系统都可以在UTF-8中运行。 我不知道Windows或任意Linux发行版的等效性。

例如,“⇒”-RIGHTWARDS DOUBLE ARROW-是Unicode 21D2,UTF8 0xE2(226),0x87(125),0x92(146)。 如果我将其粘贴到Terminal中并询问字节值,我将得到预期的结果:

>> $KCODE
=> "UTF8"
>> "⇒"
=> "\342\207\222"
>> puts "⇒"
⇒

...但...

>> "⇒"[0]
=> 226
>> "⇒"[1]
=> 135
>> "⇒"[2]
=> 146
>> "⇒"[3]
=> nil

请注意,如何仍然使用“ []”进行字节访问。 如果要执行字符串操作,请参见Rails API中的Multibyte扩展文档(对于Rails 2.2,例如,位于http://railsapi.com/ ),否则,诸如“ foo.reverse”之类的事情将做错事情; “ foo.mb_chars.reverse”通过使用“ mb_chars”代理来正确处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM