2017-06-15 3 views
0

RおよびDBIを使用してPosgreSQLからデータをクエリしましたが、奇妙な文字で壊れた結果がありました。私はサーバのエンコーディングとクライアントのエンコーディングの両方をチェックし、すべてUTF-8です。ここで私はデシベルPosgreSQLデータベースからRPosgreSQLを使用してクエリを実行したときに間違ったテキストエンコーディングが返される

ライブラリ(DBI)

でCONN <に

  1. 接続をやったことだ - dbConnectの( DRV = RPostgreSQL :: PostgreSQLの()、 ホスト= *、 DBNAME = , ユーザー= 、 パスワード= *

  2. 結果を取得

    result_df < - dbGetQuery( CONN、私が得たもの がã¯ã˜ã‚ã¾ã—ã¦1008(ã¨ãƒ¼ã‚„orã¨ã…ーや)ã¨ã„ã„ã¾ã™ã€‚ 表ç¾ã™ã‚‹ã®ãŒå¤§å¥½ããªå­ã§ã™!! 感性ãŒäººã¨ã‚ºãƒ¬ã¦ã¾ã™(笑) ãŠæ­Œã‚’ã‚‚ã£ã¨ã†ã¾ããªã‚ŠãŸã„ã§ã™ã€‚ しばらく )

  3. 結果である は "= 1234 user_idはどこsome_table から説明 を選択"実際のテキストははじめまして1008(とーやorとぅーや)といいます。 表現するのが大好きな子です!! 感性が人とズレてます(笑) お歌をもっとうまくなりたいです。

です

私はテキストを読むことによって、再びテストし、その後戻ってそれを印刷

x <- 'はじめまして1008(とーやorとぅーや)といいます。 表現するのが大好きな子です!! 感性が人とズレてます(笑) お歌をもっとうまくなりたいです。' 
print(x) 
>> はじめまして1008(とーやorとぅーや)といいます。 表現するのが大好きな子です!! 感性が人とズレてます(笑) お歌をもっとうまくなりたいです。 

あり、この場合のエンコーディングで何も間違ってはいないので、私は、データがRに、データベースから返されたときに、問題が起こったと思いますが、私はそれを修正する方法を知らない。

+0

Rホストマシンからpsqlを使用してクエリを実行するとどうなりますか? –

+0

それはこのように見えました。 "" ã®ãƒå¤§å¥½ããªåã§ã™!! AE「八重€™§ãŒäººã¨ã,ºãƒ¬ã|ã¾ã(ç¬ ')ãŠæŒã,'ã,,ã£AA†ã¾ããªã,ŠãŸã「ã§ã™ã€ ' –

+0

だから、持っているように見えるんRとは関係がありません。psql -lは何を表示し、SHOW client_encoding; pg_conversionでコンバージョンが起こっていますか? –

答えて

0


RPostgreSQLが正しく文字列のエンコーディングを設定していない、このissueを参照してください。

だから、あなた自身でエンコーディングを宣言する必要があります。 dplyrで、あなたはこのようにそれを行うことができます。

suppressPackageStartupMessages({ 
    library(dplyr) 
    library(RPostgreSQL) 
}) 

my_con <- 
    dbConnect(
    PostgreSQL(), 
    user = my_username, 
    password = my_password, 
    host = my_host, 
    dbname = my_dbname 
) 

my_table <- tribble(
    ~user_id, ~description, 
    "1234",  "はじめまして1008(とーやorとぅーや)といいます。 表現するのが大好きな子です!! 感性が人とズレてます(笑) お歌をもっとうまくなりたいです。" 
) 

copy_to(my_con, my_table) 

result_df <- dbGetQuery(my_con, "SELECT description FROM my_table WHERE user_id = '1234'") 

declare_utf8 <- function(x) { 
    Encoding(x) <- "UTF-8" 
    x 
} 

result_df %>% mutate_if(is.character, declare_utf8) %>% pull() 
#> [1] "はじめまして1008(とーやorとぅーや)といいます。 表現するのが大好きな子です!! 感性が人とズレてます(笑) お歌をもっとうまくなりたいです。" 

dbDisconnect(my_con) 
#> [1] TRUE 

pull()は、ここでは必要ありません。あなたのdescription がベクトルとしてそれをINGの原因 別character encoding bug、 ので、私はpullに私のマシン上でdata.frame()ように右印刷されませんので、私はちょうどそれを使用しています。

関連する問題