2017-04-03 2 views
2

ROracleを使用してRからOracleデータベースに接続しています。問題は、それが疑問符を返すすべての特殊なutf-8文字です。中国語の値によっては、疑問符の堅い文字列が返されます。私は、これがパッケージの喜びのためにこれに答えるこのサイト(または他のもの)に関する他の質問を見つけなかったので、これは関連していると私は信じています。 最も有望だった質問には、MySQLの回答が含まれています:Fetching UTF-8 text from MySQL in R returns "????"しかし、私はROracleのためにこの作業を行うことができませんでした。このサイトは役に立つ情報も提供しました​​RODBCを使用する前に、簡単にuft-8エンコーディングを設定できました。ROracle接続してutf8文字を引き出す

ここにいくつかのサンプルコードがあります...あなたがutf-8文字を持つOracleデータベースを持っていないと、複製できない可能性があります。私はデータプライバシーの理由からホスト番号とsidも変更しました。 ..

library(ROracle) 
drv <- dbDriver("Oracle") 
# Create the connection string 
host <- "10.00.000.86" 
port <- 1521 
sid <- "f110" 
connect.string <- paste(
    "(DESCRIPTION=", 
    "(ADDRESS=(PROTOCOL=tcp)(HOST=", host, ")(PORT=", port, "))", 
    "(CONNECT_DATA=(SID=", sid, ")))", sep = "") 

con <- dbConnect(drv, username = "XXXXXXXXX", 
       password = "xxxxxxxxx",dbname=connect.string) 

my.table <- dbReadTable(con, "DASH_D_PROJECT_INFO") 

my.table[40, 1:3] 

    PROJECT_ID DATE_INPUT PROJECT_NAME 
    211625 2012-07-01 ??????, ?????????????????? ????? ??????, 1869?1917 [????? 3] 

助けていただければ幸いです。私はROracleのパッケージの全文を読んできましたが、utf-8文字を書くための解決策があるように見えましたが、それを読むための解決策はありませんでした。

答えて

2

数週間後、私は自分の答えを見つけました。私はそれが他の人にとって価値があることを願っています。

私の質問は、Oracleがデータをどのように格納するかによって大きく回答されます。 UTF-8の特性を維持したい場合は、表の列がvarcharだけでなくNVARCHARになる必要があります。その時点で、通常のデータの取得とエンコードは、期待通りにRで動作します。私は間違った場所でエラーを探していました。

私は、1つは、次のようにUTF-8に変換しないだろう、私はいくつかを持っていたファイルの書き込みでは、UTF-8

でOracleにRからUTF-8データを書き込む方法についてのハングアップ言及したいと思います

。だから私はあまりにも多くの部分でステップを踏んで、2つのステップでそれをオラクルテーブルに書きました。結果は完全に機能しました。

Encoding(my.data1$Project.Name) <- "UTF-8" 

my.data1.1 <- my.data1[Encoding(my.data1$Project.Name) == "UTF-8", ] 
my.data1.2 <- my.data1[Encoding(my.data1$Project.Name) != "UTF-8", ] 
attr(my.data1.1$Project.Name, "ora.encoding") <- "UTF-8" 

この洞察が深いと判明した場合は、それ以上のものを見つけることができます。

+0

偉大な答え、十分にありがとうございます! –

関連する問題