3

我为树莓派制作了一个非常小的应用程序,它使用 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')

这没用!

4

1 回答 1

0

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

于 2012-12-30T12:04:57.463 回答