Ruby ruby 1.9.3 irb 下不能用中文?!

mimosa · 2012年04月06日 · 最后由 metal 回复于 2012年09月21日 · 8989 次阅读
howls-macbook:one mimosa$ irb
irb(main):001:0> s = '\U+FFE4\U+FFB8\U+FFAD\U+FFE6'
=> ""
irb(main):002:0> 

如何解决呢?

> s="中文"
 => "中文" 

irb(main):029:0> x = "ruby 1.9.3 irb下不能用中文?!"
=> "ruby 1.9.3 irb下不能用中文?!"
irb(main):030:0> p x
"ruby 1.9.3 irb下不能用中文?!"
=> "ruby 1.9.3 irb下不能用中文?!"
irb(main):031:0> 

Mac 需要先装 readline 如果是用 RVM 安装的话,要这样 https://rvm.beginrescueend.com/packages/readline/

#3 楼 @huacnlee 我系统有 readline 6.2.1 的,之前 1.9.2 时一直没问题的,用 rbenv 升到 1.9.3-p125-perf 后出现这个问题的。

irb(main):010:0* $KCODE
=> "NONE"
irb(main):011:0> $KCODE = "utf8"
=> "utf8"
irb(main):012:0> "你好"
=> "htcUPCT

这样的吗

#5 楼 @jhjguxin 那是 1.8 的吧?1.9 没这玩意~

@mimosa

jhjguxin@jhjguxin-virtual-machine:~/payment-china$ ruby -v
ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux]
jhjguxin@jhjguxin-virtual-machine:~/payment-china$ irb
1.9.2p290 :001 > "你好"
 => "你好" 
1.9.2p290 :002 > $KCODE
(irb):2: warning: variable $KCODE is no longer effective
AY_PLF

对的

Ubuntu 1.9.2 里面 默认 就可以输入中文了 应该默认就是 UTF8 编码

Encoding.locale_charmap 
 => "UTF-8" 

我也是升级到 1.9.3 后不能输入中文

1.9.3-p125 官方版表示無壓力。

⚡ irb
1.9.3p125 :001 > s = "能打中文嗎?"
 => "能打中文嗎?" 
1.9.3p125 :002 > p s
"能打中文嗎?"
 => "能打中文嗎?" 

The result is highly platform dependent. So Encoding.find(Encoding.locale_charmap) may cause an error. If you need some encoding object even for unknown locale, Encoding.find(“locale”) can be used.

捣鼓了半天 只能查看 编码 不知道怎么设定 local 编码 估计 取消了吧

# Encoding Class Methods
::aliases 
::compatible? 
::default_external 
::default_external= 
::default_internal 
::default_internal= 
::find 
::list 
::locale_charmap 
::name_list 
#ascii_compatible? 
#dummy? 
#inspect 
#name 
#names 
#replicate 
#to_s 


build_package_combined_patch() {
  local package_name="$1"

  {
    curl https://github.com/ruby/ruby/pull/47.diff | git apply
    curl https://raw.github.com/gist/1859082/performance_and_backport_gc.patch | patch -p1
    autoconf
    ./configure --prefix="$PREFIX_PATH" --disable-install-doc --with-readline-dir=$(brew --prefix readline)
    make -j 8
    make install
  } >&4 2>&1

}
require_gcc
install_package "yaml-0.1.4" "http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz"
install_package "ruby-1.9.3-p125" "http://ruby.taobao.org/mirrors/ruby/ruby-1.9.3-p125.tar.gz" combined_patch

指定了 readline 目录。

问题出现的原因是用 rvm 装 ruby1.9.3 时没有正确编译 readline,好像是 mac 上才这样,用官方的方法(3 楼)重新编译一下 ruby 或者 readline 就可以了,我用的是后者, $ cd $HOME/.rvm/src/ruby-1.9.3*/ext/readline $ ruby extconf.rb -- --with-readline-dir="/usr/local/Cellar/readline/6.2.2" $ make install

你好 = 1
puts 你好

=> 1

我在 Mac 10.6 下竟然这样启动“irb --noreadline”时可以输入中文,这样启动“irb --readline”则不能输入中文。

#12 楼 @scys77 你的这个方法在 rbenv 下也可行,我把它写进 wiki 了。

求各位抓虫,继续补充

……11 楼那个图里,楼主直接输入了个中文,irb 解释成 identifier,然后出错信息是变量或方法未定义 这显然是能用中文,楼主根本就没看懂出错信息吧…………………… 在字符串内用 codepoint 的方法是"\uXXXX"或者"\u{XXXX}",小写 u,双引号,没有+

我也是这个问题,折腾很久。在 bash 加了点料还是装了 readline 搞定的,我也忘记了。

ruohanc 俺们这也应该搞个 reputation 这样的系统... 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号