Rで 次のUTF-8でエンコードされたファイル を読み込もうとしていますが、それを読むたびに、Unicode文字が正しくエンコードされていません。
ファイルの処理に使用しているスクリプトは次のとおりです。
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を使用しています。
この問題は、RStudio内またはコマンドラインR内のどちらの場合でも、間違ったロケールが設定されていることが原因です。
問題がRStudioでのみ発生する場合コマンドラインRではなく、RStudio-> Preferences:Generalに移動して、「デフォルトのテキストエンコーディング:」が何に設定されているかを通知し、「変更」をクリックしてWindowsを試します- 1252、UTF-8またはISO8859-1( 'latin1')(または、常にプロンプトを表示したい場合は、 'Ask')。下にスクリーンショットを添付。どれがうまくいったか教えてください!
問題がコマンドライン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
_は、使用するエンコードがロケールと互換性があるかどうかを判断し、互換性がない場合は警告またはエラーになるはずです)。
どの修正が機能したかをお知らせください!これをより一般的に文書化して、正しいエンハンスを見つけられるようにしています。
それは私にとってはうまくいきます。
ロケールを変更/リセットしようとしましたか?
私の場合、それはで動作します
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
...
Rのポルトガル語ロケール(MAC OS 10.12.3)でも同じ問題が発生しました。上記のスレッドに従って試しましたが、誰も動作しませんでした。それから私はこのウェブページを見つけました: https://docs.moodle.org/dev/Table_of_locales そしてちょうどSys.setlocale(category = "LC_ALL", locale = "pt_PT.UTF-8")
を試してみました、そしてそれは動作します。
library(readr)
やread_csv()
などのread_fwf()
関数を試してみてください(ドットの代わりにアンダースコアに注意してください)。ファイルのエンコーディングを推測し、通常はそうすること;これらの読み取り関数は、RStudio GUI関数「データセットのインポート」にバンドルされています。