ここには複数の困難があります。
したがって、-as-binary-as-string から書き込むにUTF-8
はCP1252
、文字列を「生の」数値 (バイトの R クラス) に変換してから文字に変換し、その「エンコーディング」を からCP1252
に変更する必要がありますUTF-8
(実際には変換します)。そのバイト値を の同じ文字の対応する値にUTF-8
変換した後、生に再変換し、最後にファイルに書き込むことができます。
char_bin_str <- '10001100'
char_u <- iconv(rawToChar(as.raw(strtoi(char_bin_str, base=2))),
# "\x8c" 8c 140 '10001100'
from="CP1252",
to="UTF-8")
test.file <- "~/test-unicode-bytes.txt"
zz <- file(test.file, 'wb')
writeBin(charToRaw(char_u), zz)
close(zz)
第二に、あなたがするときreadBin()
、十分な大きさの読み取りバイト数を与えることを忘れないでください(n=file.info(test.file)$size
ここで)、それ以外の場合は最初のバイトのみを読み取ります(以下を参照):
zz <- file(test.file, 'rb') x <- readBin(zz, 'raw', n=file.info(test.file)$size) close(zz)
x [1] c5 92
第三に、最終的にそれを文字に戻し、R によって正しく理解されて表示されるようにしたい場合は、最初に を使用して文字列に変換する必要がありますrawToChar()
。表示される方法は、デフォルトのエンコーディングによって異なります。それが何であるかを確認Sys.getlocale()
1252
してください (おそらく、Windows では末尾が何か)。おそらく最良の方法は、文字が次のように読み取られるように指定することUTF-8
です。そうしないと、デフォルトのエンコーディングで理解されます。
xx <- rawToChar(x) エンコーディング(xx) <- "UTF-8"
xx [1]「あ」
これにより、物事が制御され、正しいバイトが に書き込まれUTF-8
、すべての OS で同じになるはずです。それが役に立てば幸い。
PSx
: コードでが返された理由が正確にはわかりません。パラメータとして (またはそれ以上) を に設定した場合c5
は返されたと思います。私のマシン ( Mac OS X 10.7、R 3.0.2およびWin XP、R 2.15 ) では、(意味のあるの最初の文字)の 16 進 ASCII 表現である がコードと共に返されます。R に戻る前に、Office でファイルを開いてそのまま保存したのではないでしょうか?c5 92
n=2
readBin()
31
'1'
'10001100'
CP1252
UTF-8