首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

娃子鸭学Ruby-12、文本二

2012-12-23 
娃娃鸭学Ruby-12、文本二5、对字符串进行迭代Ruby1.8String 类 each方法,Enumerable模块[]Ruby1.9取消了each

娃娃鸭学Ruby-12、文本二
5、对字符串进行迭代
Ruby1.8
    String 类 each方法,Enumerable模块
    []

Ruby1.9
   取消了each方法,不再包含Eumerable模块。
 取代的:
 each_byte
   each_char
   each_line

s="¥1000"
s.each_char{|x| print "#{x} "}   # "¥ 1 0 0 0 "
0.upto(s.size-1){|i| print "#{s[i]} "}   # "¥ 1 0 0 0 "


6、字符串编码玫多字节字符
Ruby 1.8
    字符串是一个字节序列。字符串的每个字节都假定为一个ASCII字符。 字符串里的单个元素不是字符,而是数字。ASCII码
Ruby1.9
 字符串是实实在在的字符序列,字符不必局限于ASCII码。

1)Ruby1.9里的多字节字符
Ruby1.9重写了String类
# -*- coding:utf-8 -*-
s="2×2=4"
s.length  # 5  '2' '×'  '2'  '=' '4'
s.bytesize #6:bytes(hex):32 c3 97 32 3d 34

ASCII-8BIT   8位ASCII
BINARY

Ruby 1.9
  US-ASCII   7位ASCII

连接和模式匹配
   要求:两个字符串(或一个字符串和一个正则表达式)具有相互兼容的编码。
   例如:一个Ascii字符串与UTF-8 连接  得到UTF-8字符串
   UTF-8和SJIS不能连接  编码方式不兼容,抛出异常
  
   咋办?
   使用类方法: Encoding.compatible?来测试两个字符串的编码是否兼容,返回 兼容的超集否则返回nil
  
force_encoding 方法显式地设置一个字符串的编码方式
text=stream.readline.force_encoding("utf-8")
bytes=text.dup.force_encoding(nil) #nil binary
注意
1、force_encoding不生成拷贝,直接修改编码后返回
2、不做验证

s="\xa4".force_encoding("utf-8") #无效
s.valid_encoding?  # false

byte="\xA4"
char=byte.encode("utf-8","iso-8859-15")

2)Encoding类
Ruby1.9中的Encoding类代表了一种字符编码。
   Encoding类
            方法              返回
           name              一个编码方式的名字
           to_s                name 方法的同义词
           inspect            比Name方法更详尽的方式将一个Encoding对象转换成一个字符串
          
          常量                           说明
     Encoding::ASCII_8BIT      ::BINARY
     Encoding::UTF-8
     Encoding::EUC_JP
     Encoding::SHIFT_JIS
Ruby1.9
     Encoding::US_ASCII
     Encoding::ISO-8859-1


3)Ruby1.8里的多字节字符
Ruby1.8
   所有的字符串解释成由8位字节构成的序列
  jcode  包含对多字节字符的初步支持

2011-4-6 19:54 danny

热点排行