2012-12-28 90 views
3

後我做了樹莓派一個很小的應用程序,使用西納特拉調用系統:
https://github.com/khebbie/SpeakPi從西納特拉

該應用程序允許用戶輸入一些文字的文本區域,並要求谷歌創建一個mp3爲它的文件。

在那裏我有一個shell腳本調用speech2.sh它調用谷歌和播放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,如丹麥語字母'æ',這是正確的!

我打電話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

您是否嘗試過硬編碼字符串,例如'message =「%C3%A6」'檢查它是否與params對象有關? – iain

+0

不會,會試試,謝謝:-) – khebbie

+0

我這樣做了,我在路由中對它進行了硬編碼,並且發現它是錯誤的。所以這就清楚地表明,這是對系統的調用失敗... – khebbie

回答

0

因爲它處理UTF-8,請確保編碼通過增加在Ruby腳本的頂部# encoding: UTF-8魔術評論,並要求谷歌翻譯時經過ie=UTF-8參數的查詢字符串中保持正確的方式完成整個過程。