2015-10-03 37 views
3

我有一個使用google API翻譯的紅寶石,我正在將它翻譯成Elixir。Elixir:字符串強制編碼UTF-8

比如,我從API得到一些這樣的: api-data

而在紅寶石今天我這樣做:

encoded = rawdata.force_encoding("UTF-8") 

我想知道是否有一種方法來「force_encode」 (就像Ruby一樣),但是用Elixir?

Update解決方案

我達成解決方案基於您的回答傢伙非常感謝!

由於藥劑處理它作爲二進制文件然後就是招:我得到的響應正文:body |> IO.iodata_to_binary ...

defmodule Request do 
    alias Extract 
    use HTTPotion.Base 

    def process_url(url) do 
    "https://translate.google.com/translate_a/" <> url 
    end 

    def process_response_body(body) do 
    body |> IO.iodata_to_binary |> Extract.extract 
    end 
end 

Here is entire code

+1

默認情況下,Elixir字符串(更適合稱爲二進制文件)是UTF-8。或者我誤解了你的問題? –

+0

你說得對。我在文檔中看到了這一點。問題是我在這個URL(我發佈)中收到一個文件,這個文件有一些奇怪的編碼,所以當我解析文本時,我會得到像「Olá」這樣的東西。我已經通過'force_encoding'解決了紅寶石問題。任何想法? –

+1

嗯。我不知道你從哪裏得到這個文件,但根據UChardet(在我的Linux機器上),編碼是TIS-620。 https://en.wikipedia.org/wiki/Thai_Industrial_Standard_620-2533我會尋找某種實用程序將其轉換爲UTF-8。 –

回答

2

您使用武力編碼在Ruby中,當數據被標記爲二進制但真的是UTF-8。在Elixir中,它們都在同一時間,因爲所有的字符串都是二進制文件,所以我們不會標記它們。換句話說,你不應該需要強制編碼

但是,如果數據不是UTF-8,那麼您首先需要找到將其轉換爲UTF-8的方法。

+0

謝謝@JoséValim。我在你的答案中找到了一個解決方案!我更新了帖子。 –