从sinatra的一个帖子调用系统

时间:2012-12-28 21:12:15

标签: ruby bash sinatra

我为树莓派制作了一个非常小的应用程序,它使用Sinatra:
https://github.com/khebbie/SpeakPi

该应用程序允许用户在textarea中输入一些文本,并要求Google为其创建一个mp3文件。

在那里,我有一个名为speech2.sh的shell脚本,它调用Google并播放mp3文件:

#!/bin/bash
say() { 
wget -q -U Mozilla -O out.mp3 "http://translate.google.com/translate_tts?tl=da&q=$*";

local IFS=+;omxplayer out.mp3; 
}
say $*

当我从命令行调用speech.sh时,如下所示:

./speech2.sh %C3%A6sel

它像丹麦字母'æ'一样发音%C3%A6,这是正确的!

我从Sinatra路线呼叫speech2.sh,如下:

post '/say' do
  message = params[:body]
  system('/home/pi/speech2.sh '+ message)
  haml :index
end

当我这样做的时候谷歌会发出一些非常怪异的字样,比如“破管......”这是错误的!

所有字符a-z都发音正确

我尝试了一些URL编码和解码,没有任何效果。

我尝试将消息输出到命令行,它确实是"%C3%A6",当然没有意义。 你知道我做错了什么吗?

修改

总结并简化 - 如果我在bash中输入如此:

./speech2.sh %C3%A6sel

它有效

如果我开始一个irb会话并输入:

system('/home/pi/speech2.sh', '%C3%A6sel')

它不起作用!

1 个答案:

答案 0 :(得分:0)

由于它正在处理UTF-8,因此请确保编码在整个过程中保持正确,方法是在Ruby脚本的顶部添加# encoding: UTF-8魔术注释并传递ie=UTF-8参数调用Google Translate时的查询字符串。