web-dev-qa-db-ja.com

RStudioがファイルの読み取り時に使用するように指示しているエンコーディングを選択しない

Rで 次のUTF-8でエンコードされたファイル を読み込もうとしていますが、それを読むたびに、Unicode文字が正しくエンコードされていません。

enter image description here

ファイルの処理に使用しているスクリプトは次のとおりです。

defaultEncoding <- "UTF8"
detalheVotacaoMunicipioZonaTypes <- c("character", "character", "factor", "factor", "factor", "factor", "factor",
                                                     "factor", "factor", "factor", "factor", "factor", "numeric", 
                                                     "numeric", "numeric", "numeric", "numeric", "numeric",
                                                     "numeric", "numeric", "numeric", "numeric", "numeric", 
                                                     "numeric", "character", "character")

readDetalheVotacaoMunicipioZona <- function( fileName ) {
  fileConnection = file(fileName,encoding=defaultEncoding)
  contents <- readChar(fileConnection, file.info(fileName)$size)  
  close(fileConnection)
  contents <- gsub('"', "", contents)

  columnNames <- c("data_geracao", "hora_geracao", "ano_eleicao", "num_turno", "descricao_eleicao", "sigla_uf", "sigla_ue",
                   "codigo_municipio", "nome_municipio", "numero_zona", "codigo_cargo", "descricao_cargo", "qtd_aptos", 
                   "qtd_secoes", "qtd_secoes_agregadas", "qtd_aptos_tot", "qtd_secoes_tot", "qtd_comparecimento",
                   "qtd_abstencoes", "qtd_votos_nominais", "qtd_votos_brancos", "qtd_votos_nulos", "qtd_votos_legenda", 
                   "qtd_votos_anulados", "data_ult_totalizacao", "hora_ult_totalizacao")

  read.csv(text=contents, 
           colClasses=detalheVotacaoMunicipioZonaTypes,
           sep=";", 
           col.names=columnNames, 
           fileEncoding=defaultEncoding,
           header=FALSE)
}

UTF-8エンコードで送信するファイルを読み取り、すべての引用符を削除し(数値も引用符で囲まれているので、整理する必要があります)、内容をread.csvにフィードします。ファイルを正しく読み取って処理しますが、提供しているエンコード情報を使用していないようです。

このファイルを読み取るためにUTF-8を使用するにはどうすればよいですか?

私はOSXでRStudioを使用しています。

18

この問題は、RStudio内またはコマンドラインR内のどちらの場合でも、間違ったロケールが設定されていることが原因です。

  1. 問題がRStudioでのみ発生する場合コマンドラインRではなく、RStudio-> Preferences:Generalに移動して、「デフォルトのテキストエンコーディング:」が何に設定されているかを通知し、「変更」をクリックしてWindowsを試します- 1252、UTF-8またはISO8859-1( 'latin1')(または、常にプロンプ​​トを表示したい場合は、 'Ask')。下にスクリーンショットを添付。どれがうまくいったか教えてください!

  2. 問題がコマンドラインRでも発生する場合、次の操作を行います。

Macで_locale -m_を実行し、CP1252またはISO8859-1( 'latin1')をサポートしているかどうかを教えてください。必要に応じて、サポートされているロケールのリストをダンプします。 (それと同時に、MacOSのバージョンを教えてください。)

これらのロケールの両方について、そのロケールに変更してみてください。

_# first try Windows CP1252, although that's almost surely not supported on Mac:
Sys.setlocale("LC_ALL", "pt_PT.1252") # Make sure not to omit the `"LC_ALL",` first argument, it will fail.
Sys.setlocale("LC_ALL", "pt_PT.CP1252") # the name might need to be 'CP1252'

# next try IS08859-1(/'latin1'), this works for me:
Sys.setlocale("LC_ALL", "pt_PT.ISO8859-1")

# Try "pt_PT.UTF-8" too...

# in your program, make sure the Sys.setlocale worked, sprinkle this assertion in your code before attempting to read.csv:
stopifnot(Sys.getlocale('LC_CTYPE') == "pt_PT.ISO8859-1")
_

うまくいくはずです。厳密に言えば、Sys.setlocale()コマンドは、起動時に_~/.Rprofile_に入れてください。Rセッションまたはソースコード内でnotにする必要があります。ただし、Sys.setlocale()は失敗する可能性があるため、注意してください。また、セットアップコード内でSys.getlocale()を早く、頻繁にアサートします。 (実際には、_read.csv_は、使用するエンコードがロケールと互換性があるかどうかを判断し、互換性がない場合は警告またはエラーになるはずです)。

どの修正が機能したかをお知らせください!これをより一般的に文書化して、正しいエンハンスを見つけられるようにしています。

  1. RStudio設定のスクリーンショットデフォルトのテキストエンコーディングメニューを変更します。 enter image description here
14
smci

それは私にとってはうまくいきます。

ロケールを変更/リセットしようとしましたか?

私の場合、それはで動作します

Sys.setlocale(category = "LC_ALL", locale = "Portuguese_Portugal.1252")

d <- read.table(text=readClipboard(), header=TRUE, sep = ';')

head(d)

1  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  20419    20419      ITAPORANGA  33  13 VEREADOR 17157
2  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  20770    20770           MALTA  51  11 PREFEITO  4677
3  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  21091    21091     OLHO D'ÁGUA  32  13 VEREADOR  6653
4  25/04/2014  22:29:30  2012  1 ELEIÇÃO MUNICIPAL 2012 PB  21113    21113        OLIVEDOS  23  13 VEREADOR  3243
...
3

Rのポルトガル語ロケール(MAC OS 10.12.3)でも同じ問題が発生しました。上記のスレッドに従って試しましたが、誰も動作しませんでした。それから私はこのウェブページを見つけました: https://docs.moodle.org/dev/Table_of_locales そしてちょうどSys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8")を試してみました、そしてそれは動作します。

2
Jesús Bescos

library(readr)read_csv()などのread_fwf()関数を試してみてください(ドットの代わりにアンダースコアに注意してください)。ファイルのエンコーディングを推測し、通常はそうすること;これらの読み取り関数は、RStudio GUI関数「データセットのインポート」にバンドルされています。

0
Elio Diaz