最近又折腾起ruby,打算用1.9,发现encoding有不少问题,先是“invalid multibyte char (US-ASCII)
”,,这问题还好解决,magic comment就可以,但是也很土。另外一个就是“incompatible character encodings: UTF-8 and ASCII-8BIT”,GG了一下也没什么好办法,设置Encoding.default_external基本没用,default_internal还有很多gem不支持,也不行。最后还是自己想办法重写String <<方法强制所有encoding为UTF-8,暴力了一点,但起码能解决问题,不过性能是比原来的<<方法慢,耗时是原来的3倍,但还能接受,真要性能,关键部分还是可以调用原来的<<方法。代码列在后面。
1.9的encoding整成这样真令我失望,看看Yehuda的解释 http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/,所谓的原因是要支持更多encoding,对日文俄文更好的支持等等。
if RUBY_VERSION > '1.9'
Encoding.default_external = Encoding::UTF_8
Fixnum.class_eval do
alias_method :old_to_s, :to_s
def to_s
old_to_s.force_encoding("UTF-8")
end
end
Array.class_eval do
alias_method :old_pack, :pack
def pack(*args)
old_pack(*args).force_encoding("UTF-8")
end
end
end
分享到:
相关推荐
Ruby 1.9 的发布对Ruby社区带来了显著的变化,尤其是其与之前的1.8版本之间的不兼容性。这种不兼容性源于对Ruby语言及其核心库的深入修改,目的是提升语言性能和规范。Ruby 1.9.0的推出并非完全稳定,Matz,即Ruby的...
- 字符串编码:Ruby 1.9引入了对多种字符编码的支持,使得处理多语言文本变得更加灵活。 - 更强的错误检测:在1.9版本中,语法错误和类型检查更加严格,减少了运行时错误。 - 全新的语法特性:如内建的块参数,...
在Windows环境下安装Ruby 1.9,通常会涉及到编译环境的配置,因为Ruby的源码需要通过编译才能在Windows系统上运行。不过,如果你选择的是预编译的二进制zip包,这个过程就会简化很多。下面,我们将详细讨论如何通过...
1. **编码和字符集**:Ruby 1.9引入了对Unicode的全面支持,通过默认的内部编码(Encoding.default_internal)和外部编码(Encoding.default_external)来处理字符串。这使得处理多种语言和字符集变得更加容易。 2....
这种改变解决了早期版本中的一些问题,使得Block的使用更加安全和灵活。 总之,Ruby 1.9对Lambda函数的改进使得开发者可以更加高效、优雅地使用这一特性。新的语法不仅简化了Lambda的定义,而且提升了代码的可读性...
Ruby 1.9是Ruby的一个重要版本,引入了许多改进和新特性,包括性能优化、新的字符串编码系统、改进的模块和类的加载机制等。 在本书中,读者将学习到以下核心知识点: 1. **基础语法**:了解Ruby的基本数据类型,...
### Programming Ruby 1.9 3rd Edition:深入探索Ruby编程语言 #### 一、书籍概览 《Programming Ruby 1.9》是第三版,专注于介绍Ruby 1.9.2版本,由Dave Thomas、Chad Fowler和Andy Hunt共同编写。这本书由The ...
- **基本Ruby语法**: 包括变量声明、字符串处理、数字操作等基础概念。 - **数组和哈希**: 数组用于存储多个元素,而哈希则是一种键值对的数据结构,这两者都是Ruby中非常重要的数据类型。 - **符号(Symbol)**: Ruby中...
4. **异常处理**:在处理Unicode字符串时,可能会遇到编码错误或不兼容的问题。使用`begin-rescue-end`块捕获并处理这些异常,例如`rescue Encoding::CompatibilityError`,可以提供更稳健的代码。 5. **第三方库**...
### Rango:Ruby 1.9 上的轻量级网络开发框架 Rango 是一个基于 Ruby 1.9 的轻量级 Web 开发框架,它为开发者提供了灵活且强大的工具来构建网站。与 Sinatra 相比,Rango 更加健壮;而与 Rails 或 Merb 相比,它的...
Ruby是一种快速发展的激动人心的动态语言,本书是Ruby 1.9和Ruby 2.0这两个最新版本的完整参考指南。Ruby是一种完全面向对象的语言,类似于经典的面向对象语言Smalltalk。与Smalltalk一样,它是动态类型的,但与...
本篇文章将详细介绍如何在Ruby 1.9环境中进行编码转换,包括如何查看字符串的编码信息、如何强制更改字符串的编码以及如何使用`encode`方法来进行实际的编码转换。 #### 一、获取字符串的当前编码 在Ruby 1.9中,...
《Programming Ruby 1.9》一书由Dave Thomas、Chad Fowler与Andy Hunt共同编写,是Pragmatic Bookshelf出版的一部权威性指南,旨在帮助读者深入理解和掌握Ruby编程语言的1.9版本。该书不仅是对原版《Programming ...
[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 , ...
Ruby 1.9是Ruby语言的一个重大更新,它引入了多项改进和新特性,包括但不限于性能优化、新的字符串处理方式、改进的数组和哈希表操作、以及更强大的元编程能力。这些变化使得Ruby 1.9在处理大数据量和复杂逻辑时更加...
Ruby是一种面向对象的脚本语言,由日本的松本行弘(Yukihiro ...同时,实践是检验理解的最好方式,通过实际编写项目或解决编程问题,你的Ruby技能将会得到提升。记得,持续学习和探索是成为熟练Ruby开发者的不二法门。
本资源是ruby代码,提供了一系列封装好的函数,用于快速进行转换,一个函数搞定,包括如下转换,二进制字符串与hex字符串的互转。二进制字符串与整数互转,包括uint8,uin16,uint32, 以及本地字节序和网络字节序两种...