13

次のような文字列があります。

str <- "ていただけるなら"
Encoding(str) #returns "UTF-8"

私はそれをディスクに書き込みます:

write.table(str, file="chartest", quote=F, col.names=F, row.names=F)

ここで、BOM エンコーディングなしで UTF-8 に設定されている Notepadd++ のファイルを確認すると、次のようになります。

<U+3066><U+3044><U+305F><U+3060><U+3051><U+308B><U+306A><U+3089>

このプロセスで何がうまくいかないのでしょうか? 書き込んだテキスト ファイルに、R で表示される文字列を表示したいと思います。

これは Windows 7、R バージョン 2.15 上にあります。

4

2 に答える 2

16

これは、Windows の R の厄介な「機能」です。これまでに見つけた唯一の解決策は、問題のテキストのスクリプトをデコードするために必要な適切なロケールに一時的かつプログラム的に切り替えることです。したがって、上記の場合、日本語ロケールを使用します。

## This won't work on Windows
str <- "ていただけるなら"
Encoding(str) #returns "UTF-8"
write.table(str, file="c:/chartest.txt", quote=F, col.names=F, row.names=F)
## The following should work on Windows - first grab and save your existing locale
print(Sys.getlocale(category = "LC_CTYPE"))
original_ctype <- Sys.getlocale(category = "LC_CTYPE")
## Switch to the appropriate local for the script
Sys.setlocale("LC_CTYPE","japanese")
## Now you can write your text out and have it look as you would expect
write.table(str, "c:/chartest2.txt", quote = FALSE, col.names = FALSE, 
            row.names = FALSE, sep = "\t", fileEncoding = "UTF-8")
## ...and don't forget to switch back
Sys.setlocale("LC_CTYPE", original_ctype)

上記により、このスクリーンショットで確認できる 2 つのファイルが生成されます。最初のファイルは Unicode コード ポイントを示していますが、これは必要なものではありません。2 番目のファイルは、通常予想されるグリフを示しています。

日本語テキスト

なぜこれが R で起こるのか、これまでのところ誰も私に説明できませんでした。これは Windows の避けられない機能ではありません。なぜなら、この投稿で述べたように、Perl はこの問題を何とか回避しているからです。

于 2012-06-28T15:16:11.330 に答える
2

引数を使用してみましたfileEncodingか?

write.table(str, file="chartest", quote=F, col.names=F, row.names=F, fileEncoding="UTF-8")
于 2012-06-27T14:22:48.707 に答える