2017-04-17 5 views
0

私はアクティブレコードによってpostgresデータベースから文字列を取得しています。これをUTF-8コードのリストに変換する必要があります。Ruby on Railsで文字列をRuby on UTF-8コードのリストに変換します。

データベースからフェッチするコードはペルシア語の文字なので、アラビア文字のように見えるはずです。

def convertHex 

    @user=DoctorProfile.where(id: params[:id]) 
    # [email protected](:first_name) 
    ar=Array.new 
    pri=Array.new 
    [email protected](:first_name) 
    ar.split(",").map { |s| s.to_s } 

    ar.each do |p| 
    pri.push(p.ord.to_s + " , ") 
    end 

    # [email protected]("") 
    # ar = ar.each_byte.map { |b| b.to\_s(16) }.join 
    #ar.each do |c| 
    # b=b +','+ c 
    #end 

    render json: pri ,status:200 
end 

私はこの

[ 
    "1590 , " 
] 

を取得しかし、私はこのような何かしたい:

# find will already return an object, not an array 
# note it will throw an exception if user with id doesn't exist 
# to get nil instead of exception, use find_by_id(params[:id]) 
@user = DoctorProfile.find(params[:id]) 

char_codes = @user.first_name.unpack('U*') 

あるいは、もし:あなたはdecodes str (which may contain binary data) according to the format string, returning an array of each value extractedString#unpack()メソッドを使用することができます

[ 
    "1590 , 2123 , 1112 , ..." 
] 
+0

こんにちはサンドロこの回答はちょっと混乱していますが、改善できると思います。 (1)適切なインデントが必要です。 (2)1590は有効なASCIIコードではありません(ASCII値は7ビットまたは8ビットです)ので、おそらくASCIIコードではなくUTFコードを探していると思いますが、この問題を明確にする必要があります。 (3)Railsを使わずに純粋なRubyになるようにこの質問を書き直すことは、おそらく変換を別の関数に入れることで可能です。次に、関数がどのように使われているかを示し、関数に与えている実際の入力を示します。 –

+0

はい私はutfではないasciiが残念 – Sandro

+0

1590はペルシャ文字ですが、2123,1112はダミーです、私はこのケースで2日間過ごす、私は絶対に私はこの場合 – Sandro

答えて

2

U UTF-8の略で、*は、残りのすべての要素を使用します

char_codes = @user.first_name&.unpack('U*') || [] 

:はnilすることができ、あなたは安全なナビゲーション演算子でそれを処理することができます。

それはコードの配列を返します。

"Any Name".unpack('U*') 
# => [65, 110, 121, 32, 78, 97, 109, 101] 

そして、あなたは(あなたの例のように)カンマで区切られたコードのStringが必要な場合は、次のことができます単にjoinそれは:

char_codes.join(', ')