我有一个今天早些时候工作的过滤器脚本。该脚本将中文字符行作为输入,并输出它们的拼音表示(使用chinese_pinyin gem)。
#!/usr/bin/env ruby
require 'pry'
require 'chinese_pinyin'
STDIN.each_line do |line|
puts '--------'
puts line
puts '--------'
puts Pinyin.t(line, tonemarks: true)
puts '--------'
puts `ruby -v`
end
今天我的计算机停滞(非常罕见)并重新启动。之后,此脚本将仅在命令行上运行,而不是从vim内部作为过滤器。
命令行:
benlieb@bens.local 06:28 PM ~/bin >
$ echo "我" | topy
--------
我
--------
wǒ
--------
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]
现在从vim内部过滤一行包含“我”的行:
:'<,'>!topy
我明白了:
1 --------
2 我
3 --------
4
5 --------
6 ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]
进一步检查显示
Pinyin.t(line,tonemarks:true)
在vim过滤器的情况下返回一个空字符串。
我能看到的唯一区别是vim似乎是接收ASCII-8BIT编码的文本,而从CLI它是utf8。
我试图在脚本中强制使用utf8编码,
line = line.force_encoding("UTF-8")
但似乎没有效果:
--------
我
ASCII-8BIT
UTF-8
--------
--------
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin13]
发生了什么以及可能导致这些脚本表现得如此不同的原因?