iconv関数を使う。iconv関数は第1引数に指定した文字列を、toオプションに指定した文字コードに変換する。toオプションだけを指定した場合は変換後の文字列をそのまま返すが、実行環境と文字コードが合わない場合は表示が乱れるので注意。TRUEを指定したtoRawオプションを付けると、戻り値はロウ型になりバイト列で表示されるため、このオプションを使用した利用が推奨される。
以下は、「石見舞菜香」という5つの漢字からなる文字列について、文字コードをバイト列で表示した例。なお、各漢字のそれぞれの文字コードは以下のとおり。実行した環境の文字コードはUTF-8で、JISコードとシフトJISにそれぞれ変換している。toRawオプションにTRUEを指定した場合の戻り値はロウ型かつリストであることに注意。ロウ型はバイト列で表示される。
漢字 JISコード シフトJIS UTF-8
石 0x4050 0x90ce 0xe79fb3
見 0x382b 0x8ca9 0xe8a68b
舞 0x4971 0x9591 0xe8889e
菜 0x3a5a 0x8dd8 0xe88f9c
香 0x3961 0x8d81 0xe9a699
実行例は以下のとおり。
> Sys.getlocale()
[1] "LC_COLLATE=Japanese_Japan.utf8;LC_CTYPE=Japanese_Japan.utf8;LC_MONETARY=Japanese_Japan.utf8;LC_NUMERIC=C;LC_TIME=Japanese_Japan.utf8"
> iconv("石見舞菜香", to = "ISO-2022-JP")
[1] "\033$B@P8+Iq:Z9a"
> iconv("石見舞菜香", to = "ISO-2022-JP", toRaw = TRUE)
[[1]]
[1] 1b 24 42 40 50 38 2b 49 71 3a 5a 39 61
> iconv("石見舞菜香", to = "SJIS", toRaw = TRUE)
[[1]]
[1] 90 ce 8c a9 95 91 8d d8 8d 81
> iconv("石見舞菜香", to = "UTF-8", toRaw = TRUE)
[[1]]
[1] e7 9f b3 e8 a6 8b e8 88 9e e8 8f 9c e9 a6 99
iconv関数は現在の環境の文字コードに関係なく、引数に与えた任意の文字コードからなる文字列を、任意の文字コードまたは任意の文字コードによる文字列に変換する関数。よって、以下の例のようにUTF-8環境下でシフトJISに相当するバイト列をロウ型で与えてfromオプションにシフトJISを指定することで、任意の文字コードを変換することができる。最後の例では、符号化文字集合の切り替えを示すエスケープシーケンス(0x1b 0x24 0x42)が先頭に付けられていることに注意。
> ra <- as.raw(c(0x95, 0x91, 0x8d, 0xd8, 0x8d, 0x81))
> iconv(rawToChar(ra), from = "SJIS", to = "UTF-8")
[1] "舞菜香"
> iconv(rawToChar(ra), from = "SJIS", to = "UTF-8", toRaw = TRUE)
[[1]]
[1] e8 88 9e e8 8f 9c e9 a6 99
> iconv(rawToChar(ra), from = "SJIS", to = "ISO-2022-JP", toRaw = TRUE)
[[1]]
[1] 1b 24 42 49 71 3a 5a 39 61
iconv関数の第1引数にベクトルで文字列を与えると、それぞれ変換した値を返す。
> iconv(c("石見舞菜香", "和多田美咲"), to = "SJIS", toRaw = TRUE)
[[1]]
[1] 90 ce 8c a9 95 91 8d d8 8d 81
[[2]]
[1] 98 61 91 bd 93 63 94 fc 8d e7