簡體   English   中英

使用RSpec和Ruby on Rails的國際字符

[英]International chars using RSpec with Ruby on Rails

我剛剛開始使用RSpec,我在RSpec github repo上復制了非常簡單的測試,以確保事情按預期工作:

require 'spec_helper'

describe 'Home Page' do
  it "Welcomes the user" do
    visit '/products'
    page.should have_content("Welcome")
  end
end

當我將字符串更改為“Olá”或“Caçamba”之類的問題時,問題就開始了。 任何具有特殊字符的字符串。 當我這樣做時,我收到以下錯誤:

invalid multibyte char (US-ASCII) (SyntaxError)
invalid multibyte char (US-ASCII)
syntax error, unexpected $end, expecting ')'
page.should have_content("Olá")

關於如何修復它的任何想法? 也許一些配置選項? 非常感謝

很可能你錯過了文件頂部的魔術評論

# encoding: UTF-8

如果沒有此指令,Ruby會嘗試使用默認的US-ASCII編碼來解釋您的文件,並且失敗,因為此字符集不包含áç等符號。

這是James Edward II在Ruby中發布的關於默認源編碼的博客文章

國際字符幾乎總是使用US-ASCII范圍之外的值,這只是英文字母,數字和鍵盤上的一小組符號(如果您使用美國鍵盤)。 帶有重音,幻想或非偶數字符的字符(例如表情符號)用多個字節表示,這些字節用於表示US-ASCII。 數值到字符的映射是callen和編碼。 在US-ASCII之后,有ISO-8891-1,它增加了文件的重音(主要是西班牙語,法語,瑞典語等)(例如:é,å,ü等)。 之后,您將獲得Unicode,其中包括˝,‰,Ó,◊或幾乎任何您能用任何語言思考的符號。

默認情況下,Ruby具有程序的編碼,並且其中的所有字符串都是US-ASCII。 您可以使用魔術注釋更改整個文件的編碼(以及其中的所有內容)(請參閱@ KL-7的答案),或者您可以逐個字符串地更改它:

"Olé".force_encoding("ISO-8891-1")

Ruby還支持一個名為ASCI 8-bit的虛構編碼,它本質上是沒有編碼的二進制數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM