开发者

Rails utf-8 problem

开发者 https://www.devze.com 2023-03-29 06:54 出处:网络
I there, I\'m new 开发者_如何学Cto ruby (and rails) and having som problems when using Swedish letters in strings. In my action a create a instance variable like this:

I there, I'm new 开发者_如何学Cto ruby (and rails) and having som problems when using Swedish letters in strings. In my action a create a instance variable like this:

@title = "Välkommen"

And I get the following error:

invalid multibyte char (US-ASCII)
syntax error, unexpected $end, expecting keyword_end
@title = "Välkommen"
             ^

What's happening?

EDIT: If I add:

# coding: utf-8

at the top of my controller it works. Why is that and how can I slove this "issue"?


See Joel spolsky's article "The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)".

To quote the part that answers this questions concisely

The Single Most Important Fact About Encodings

If you completely forget everything I just explained, please remember one extremely important fact. It does not make sense to have a string without knowing what encoding it uses. You can no longer stick your head in the sand and pretend that "plain" text is ASCII.

This is why you must tell ruby what encoding is used in your file. Since the encoding is not marked in some sort of metadata associated with your file, some software assumed ASCII until it knows better. Ruby 1.9 probably does so until your comment when it will stop, and restart reading the file now decoding it as utf-8.

Obviously, if you used some other Unicode encoding or some more local encoding for your ruby file, you would need to change the comment to indicate the correct encoding.


The "magic comment" in Ruby 1.9 (on which Rails 3 is based) tells the interpreter what encoding to expect. It is important because in Ruby 1.9, every string has an encoding. Prior to 1.9, every string was just a sequence of bytes.

A very good description of the issue is in James Gray's series of blog posts on Ruby and Unicode. The one that is exactly relevant to your question is http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings (but see the others because they are very good).

The important line from the article:

The first is the main rule of source Encodings: source files receive a US-ASCII Encoding, unless you say otherwise.


There are several places that can cause problems with utf-8 encoding. but some tricks are to solve this problem:

  1. make sure that every file in your project is utf-8 based (if you are using rad rails, this is simple to accomplish: mark your project, select properties, in the "text-file-encoding" box, select "other: utf-8")

Be sure to put in your strange "å,ä,ö" characters in your files again or you'll get a mysql error, because it will change your "å,ä,ö" to a "square" (unknown character)

  1. in your databases.yml set for each server environment (in this example "development" with mysql)

    development:
       adapter: mysql
       encoding: utf8
    
  2. set a before filter in your application controller (application.rb):

    class ApplicationController < ActionController::Base
     before_filter :set_charset
     def set_charset
      @headers["Content-Type"] = "text/html; charset=utf-8"
     end
    end
    
  3. be sure to set the encoding to utf-8 in your mysql (I've only used mysql.. so I don't know about other databases) for every table. If you use mySQL Administrator you can do like this: edit table, press the "table option" tab, change charset to "utf8" and collation to "utf8_general_ci" ( Courtsey : kombatsanta )

0

精彩评论

暂无评论...
验证码 换一张
取 消