我为树莓派制作了一个非常小的应用程序,它使用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')
它不起作用!
答案 0 :(得分:0)
由于它正在处理UTF-8,因此请确保编码在整个过程中保持正确,方法是在Ruby脚本的顶部添加# encoding: UTF-8
魔术注释并传递ie=UTF-8
参数调用Google Translate时的查询字符串。