在某些 Ruby 运行环境中, 执行包含中文的脚本时, 有可能出现以下错误.
执行示例
> ruby kiritsubo.rb
kiritsubo.rb:1: invalid multibyte char (UTF-8)
kiritsubo.rb:1: invalid multibyte char (UTF-8)
这是编写程序时没有指定程序的编码方式造成的. Ruby 程序的编码方式, 是通过在程序的首行代码添加注释 "#encoding:编码方式" 来指定(编码的规则称为 encoding). 我们称这个注释为 魔法注释
( magic comment ).
例如, 使用简体中文版 Windows 常用编码 GBK 编写代码时, 可像下面这样写魔法注释.
# encoding: GBK
print " 话说某个朝代, 后宫宾妃甚多,\n "
print " 其中有一宫女, 出生并不十分高贵, 却蒙圣恩宠爱.\n "
这样指定程序的编码方式后, Ruby 在执行程序时就可以正确识别程序中的中文了. 下表是各平台常用的编码方式. 平台有多个常用编码方式时, 请按照实际情况选择适合的编码方式.
平台 | 编码方式 |
---|---|
Windows | GBK( 或者 GB 2312 ) |
Mac OS X | UTF-8 |
Unix | UTF-8 |
另外, 若没指定魔法注释, Ruby 会默认使用 UTF-8 编码方式. 因此, 在 Ruby 2.0 中, 如果使用 UTF-8 编码方式, 可以省略魔法注释.
除此之外, 使用 p 方法输出中文时, 有时也会出现乱码的情况. 这时, 可以使用 "-E编码方式"这个选项来指定输出结果的编码方式. 例如 希望以 UTF-8 编码方式在控制台输出结果时, 可像下面这样执行命令.
ruby -E UTF-8 脚步文件名 # ruby 执行方式
irb - E UTF-8 # irb 执行方式
网友评论