`
like.eagle
  • 浏览: 253121 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Ruby 1.9以后字符串编码方式的变化

    博客分类:
  • ruby
阅读更多

在某次为项目的一个应用程序memy做rake测试时出现了如下的错误:

[root@rp1 memy3.0.7]# rake --trace
error_info
rake aborted!
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/common.rb:425: invalid multibyte char (US-ASCII)
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/common.rb:425: invalid multibyte char (US-ASCII)
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/common.rb:425: syntax error, unexpected $end, expecting ')'
str = str.gsub("?","-")
^
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `block in require'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:225:in `block in load_dependency'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:596:in `new_constants_in'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:225:in `load_dependency'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/dependencies.rb:239:in `require'
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks.rb:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:68:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:66:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:66:in `block in require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:55:in `each'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler/runtime.rb:55:in `require'
/usr/local/lib/ruby/gems/1.9.1/gems/bundler-1.0.13/lib/bundler.rb:120:in `require'
/var/qup/memy3.0.7/config/application.rb:7:in `<top (required)>'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
/var/qup/memy3.0.7/Rakefile:4:in `<top (required)>'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/rake_module.rb:25:in `load'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/rake_module.rb:25:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:495:in `raw_load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:78:in `block in load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:77:in `load_rakefile'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:61:in `block in run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:129:in `standard_exception_handling'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/lib/rake/application.rb:59:in `run'
/usr/local/lib/ruby/gems/1.9.1/gems/rake-0.9.2/bin/rake:32:in `<top (required)>'
/usr/local/bin/rake:19:in `load'
/usr/local/bin/rake:19:in `<main>'

  

从网上调查得知,Ruby 1.9以后实现了新的字符串编码方式,而jieks-0.0.6的代码用的还是Ruby1.8的字符串机制,所以导致该错误。解决的方法是,修改出错的文件,在其开头第一行加入:
# encoding: utf-8

(或者加入 # coding: utf-8 也可\(^o^)/~)

继续执行rake命令,很多文件出现了很多同样的错误,解决办法也是一样的。
统计下来,总共有如下的文件需要作如是修正:
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/jieks.rb
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/qup.rb
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieks-0.0.6/lib/jieks/common.rb
/var/qup/memy3.0.7/thinking-sphinx/ruby/1.9.1/gems/jieksquery-0.0.11/lib/jieksquery/query.rb

 

分享到:
评论

相关推荐

    Programming Ruby 1.9 (3rd edition)和源码

    - 字符串编码:Ruby 1.9引入了对多种字符编码的支持,使得处理多语言文本变得更加灵活。 - 更强的错误检测:在1.9版本中,语法错误和类型检查更加严格,减少了运行时错误。 - 全新的语法特性:如内建的块参数,...

    windows下安装Ruby 1.9 二进制zip包

    在Windows环境下安装Ruby 1.9,通常会涉及到编译环境的配置,因为Ruby的源码需要通过编译才能在Windows系统上运行。不过,如果你选择的是预编译的二进制zip包,这个过程就会简化很多。下面,我们将详细讨论如何通过...

    为何Ruby 1.9的不兼容性会导致原有Ruby代码无法工作

    Ruby 1.9 的发布对Ruby社区带来了显著的变化,尤其是其与之前的1.8版本之间的不兼容性。这种不兼容性源于对Ruby语言及其核心库的深入修改,目的是提升语言性能和规范。Ruby 1.9.0的推出并非完全稳定,Matz,即Ruby的...

    Programming Ruby 1.9

    1. **编码和字符集**:Ruby 1.9引入了对Unicode的全面支持,通过默认的内部编码(Encoding.default_internal)和外部编码(Encoding.default_external)来处理字符串。这使得处理多种语言和字符集变得更加容易。 2....

    透视Ruby 1.9的Lambda函数

    在旧版本中,这会导致解析错误,但在Ruby 1.9及以后的版本中,这样的写法是被支持的。下面的代码示例展示了在Ruby 1.9中如何正确地在一个Block中调用另一个Block: ```ruby class SandBox def abc(*args) yield(*...

    Programming Ruby 1.9 The Pragmatic Programmers' Guide

    Ruby 1.9是Ruby的一个重要版本,引入了许多改进和新特性,包括性能优化、新的字符串编码系统、改进的模块和类的加载机制等。 在本书中,读者将学习到以下核心知识点: 1. **基础语法**:了解Ruby的基本数据类型,...

    Programming Ruby 1.9 3rd edition

    ### Programming Ruby 1.9 3rd Edition:深入探索Ruby编程语言 #### 一、书籍概览 《Programming Ruby 1.9》是第三版,专注于介绍Ruby 1.9.2版本,由Dave Thomas、Chad Fowler和Andy Hunt共同编写。这本书由The ...

    ruby 1.9 教程

    - **基本Ruby语法**: 包括变量声明、字符串处理、数字操作等基础概念。 - **数组和哈希**: 数组用于存储多个元素,而哈希则是一种键值对的数据结构,这两者都是Ruby中非常重要的数据类型。 - **符号(Symbol)**: Ruby中...

    Programming Ruby 1.9 & 2.0 The Pragmatic Programmers’ Guide 4th Edition

    Ruby 2.0的主要语言变化是增加了关键字参数,并将UTF-8作为默认源文件编码。标准库中增加了一些内容,包括支持懒惰访问潜在无限列表的Enumerator::Lazy,Refinements允许你封装对第三方类的更改,并将其作用域限制在...

    Programming Ruby 1.9 (Pragmatic Bookshelf 2009).pdf

    《Programming Ruby 1.9》一书由Dave Thomas、Chad Fowler与Andy Hunt共同编写,是Pragmatic Bookshelf出版的一部权威性指南,旨在帮助读者深入理解和掌握Ruby编程语言的1.9版本。该书不仅是对原版《Programming ...

    (ruby 1.9 开发)Rango

    ### Rango:Ruby 1.9 上的轻量级网络开发框架 Rango 是一个基于 Ruby 1.9 的轻量级 Web 开发框架,它为开发者提供了灵活且强大的工具来构建网站。与 Sinatra 相比,Rango 更加健壮;而与 Rails 或 Merb 相比,它的...

    [Ruby] Ruby 1.9 & 2.0 编程 (英文版)

    [Pragmatic Bookshelf] Ruby 1.9 & 2.0 编程 (英文版) [Pragmatic Bookshelf] Programming Ruby 1.9 & 2.0 The Pragmatic Programmers' Guide 4th Edition (E-Book) ☆ 出版信息:☆ [作者信息] Dave Thomas , ...

    Pragmatic.Programming.Ruby.1.9.Apr.2009.pdf

    Ruby 1.9是Ruby语言的一个重大更新,它引入了多项改进和新特性,包括但不限于性能优化、新的字符串处理方式、改进的数组和哈希表操作、以及更强大的元编程能力。这些变化使得Ruby 1.9在处理大数据量和复杂逻辑时更加...

    Ruby-Unicode字符串调试帮助

    Ruby 1.9及更高版本默认使用UTF-8编码,这意味着所有字符串都是Unicode字符串。Ruby中的String类提供了许多内置方法来处理Unicode字符,如`codepoints`, `chars`, 和 `each_char`,它们可以帮助开发者遍历和操作字符...

    Ruby编程语言_涵盖Ruby 1.8和1.9

    首先,Ruby 1.9改进了字符串处理,引入了Unicode支持,使得处理多语言文本变得更加方便。其次,Ruby 1.9对语法进行了一些调整,例如,变量声明前的符号从`$`改为`@`或`@@`,以更清晰地区分实例变量和类变量。此外,...

    Pragmatic.Programming.Ruby.1.9

    1.9版本是Ruby的一个重要里程碑,引入了许多新特性,包括性能改进、新的字符串处理方式等。 #### 描述解析:“Pragmatic.Programming.Ruby.1.9.Apr.2009” 这一描述提供了更具体的信息,指出这本书是在2009年4月...

    ruby编码转换

    本篇文章将详细介绍如何在Ruby 1.9环境中进行编码转换,包括如何查看字符串的编码信息、如何强制更改字符串的编码以及如何使用`encode`方法来进行实际的编码转换。 #### 一、获取字符串的当前编码 在Ruby 1.9中,...

Global site tag (gtag.js) - Google Analytics