22

PostgreSQL データベースに直接リンクされている Windows マシンで R を実行しています。私はRODBCを使用していません。私のデータベースは、次の R コマンドで確認できるように UTF-8 でエンコードされています。

dbGetQuery(con, "SHOW CLIENT_ENCODING")
#   client_encoding
# 1            UTF8

ただし、一部のテキストが R に読み込まれると、R では奇妙なテキストとして表示されます。

たとえば、次のテキストが PostgreSQL データベースに表示されます: "Stéphane"

R にエクスポートすると、次のように表示されます: "Stéphane" ( éはéとしてエンコードされます)

RI にインポートするときは、コマンドを使用しdbConnectて接続を確立し、dbGetQueryコマンドを使用して SQL を使用してデータを照会します。データベースに接続するときやクエリを実行するときに、テキスト エンコーディングをどこにも指定しません。

オンラインで検索しましたが、問題の直接的な解決策が見つかりません。私はこのリンクを見つけましたが、彼らの問題は私が使用していないRODBCにあります。

このリンクはシンボルを識別するのに役立ちますが、R で検索と置換を行いたいだけではありません...データが多すぎます。

以下のコマンドを実行してみましたが、警告が表示されました。

Sys.setlocale("LC_ALL", "en_US.UTF-8")
# [1] ""
# Warning message:
# In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
#   OS reports request to set locale to "en_US.UTF-8" cannot be honored
Sys.setenv(LANG="en_US.UTF-8")
Sys.setenv(LC_CTYPE="UTF-8")

コマンドで警告が発生しSys.setlocale("LC_ALL", "en_US.UTF-8")ます。私の直感では、これは Windows 固有の問題であり、Mac/Linux/Unix では発生しません。

4

5 に答える 5

13

R にエクスポートすると、次のように表示されます: "Stéphane" (é は é としてエンコードされます)

あなたの R 環境は、latin-1 や windows-1252 のような 1 バイトの非合成エンコーディングを使用しています。Python でのこのテストéを見てください。これは、latin-1 であるかのようにデコードされた の utf-8 バイトが、次のテキストを生成することを示しています。

>>> print u"é".encode("utf-8").decode("latin-1")
é

SET client_encoding = 'windows-1252'または、R 環境が使用するエンコーディングを修正します。コンソールで実行している場合は、コンソール コマンドcmd.exeをいじる必要があります。chcpそれ以外の場合は、R ランタイムが何であれ固有です。

于 2014-01-28T05:32:46.980 に答える