13

Windows764ビットでR2.15.0を使用しています。Unicode(CJK)テキストをファイルに出力したいのですが。

次のコードは、UTF-8ファイル接続で書き込むために送信されたUnicode文字が(I)期待どおりに機能しないことを示しています。

rty <- file("test.txt",encoding="UTF-8")
write("在", file=rty)
close(rty)
rty <- file("test.txt",encoding="UTF-8")
scan(rty,what=character())
close(rty)

スキャンの出力で示されるように:

Read 1 item 
[1] "<U+5728>"

ファイルはUTF文字自体ではなく、ある種のANSI準拠のフォールバックで書き込まれました。初めて正しく動作させることはできますか(つまり、代わりに「在」を含むテキストファイルを使用して)、またはコード文字列を適切な文字で置き換えて出力をUnicodeに変換するために、追加の魔法を働かせることができますか?

ありがとう。

[詳細:同じコードがCygwin、R 2.14.2で正しく動作しますが、Win7の2.14.2も壊れています。これは私の側のどこかにありますか?]

4

5 に答える 5

22

この問題は、いくつかのR-Windows の特別な動作によるものです (デフォルトのシステム コーディングを使用するか、またはいくつかのシステム書き込み関数を使用します。詳細はわかりませんが、動作は実際にはわかっています)。

Windows でテキスト UTF8 エンコーディングを書き込むには、useBytes=TwriteLines や readLines などの関数でオプションを使用する必要があります。

txt <- "在"
writeLines(txt, "test.txt", useBytes=T)

readLines("test.txt", encoding="UTF-8")
[1] "在"

ここで、Kevin Usheyによる非常によく書かれた記事を見つけてください。

于 2014-08-26T13:25:42.480 に答える
8

UTF-8 文字列をテキスト ファイルに保存します。

kLogFileName <- "parser.log"
log <- function(msg="") {
  con <- file(kLogFileName, "a")
  tryCatch({
    cat(iconv(msg, to="UTF-8"), file=con, sep="\n")
  },
  finally = {
    close(con)
  })
}
于 2013-05-05T15:11:58.160 に答える
0

オブジェクトの名前writeを取るように構築されており、そのような名前付きオブジェクトを構築していないように見えるため、問題が発生していると思います。代わりにこれを試してください:

txt <- "在"
rty <- file("test.txt",encoding="UTF-8")
write(txt, file=rty)
close(rty)
rty <- file("test.txt",encoding="UTF-8")
 inp <- scan(rty,what=character())
#Read 1 item
 close(rty)
 inp
#[1] "在"
于 2012-05-20T21:31:45.170 に答える
0

DB からの UTF-8 文字列にこのような問題があります。

それらを適切に保存する唯一の方法は、ファイルをバイナリモードで保存することです。

  F <- file(file.name, "wb")
  tryCatch({
    writeBin(charToRaw(the_utf8_str), F)
  },
  finally = { 
    close(F)
  })
于 2013-04-21T10:41:13.857 に答える