[R]iconv関数で文字列を変換するとバイト列の先頭に「FE FF」や「1B 24 42」が付く
「FE FF」はUnicodeにおけるBOM(バイトオーダーマーク)、「1B 24 42」はJISコードにおけるエスケープシーケンス。
UnicodeのUTF-16では、文字列を表現するバイト列のそのバイトの格納する順番を指定することができ、上位バイトを先に記述することをビッグエンディアン、下位バイトを先に記述する方法をリトルエンディアンという。「あ」(JIS:0x2422、UTF-16:0x3042)と「亜」(JIS:0x3021、UTF-16:0x4E9c)の二文字を使って試してみる。
以下は、シフトJIS(CP932)の環境で、文字列「あ亜」をUTF-16に変換した例。
> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16"))
[1] fe ff 30 42 4e 9c
> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16BE"))
[1] 30 42 4e 9c
> charToRaw(iconv("あ亜", from = "CP932", to = "UTF-16LE"))
[1] 42 30 9c 4e
1番目の例ではエンディアンを指定しないため、「FE FF」(関数の戻り値は小文字で「fe ff」)が付けられてビッグエンディアンであることが明示されている。2番目はビッグエンディアンを指定、3番目はリトルエンディアンを指定した例。
同様にJISコード(ISO-2022-JP)に変換してみる。
> charToRaw(iconv("あ亜", from = "CP932", to = "ISO-2022-JP"))
[1] 1b 24 42 24 22 30 21
「あ亜」のバイト列(24 22 30 21)の前に「1B 24 42」(関数の戻り値は小文字で「1b 24 42」)が付けられている。これは以降のバイト列がJISコードによる文字列であることを明示するためのバイト列。UTF-16と異なり、iconv関数でJISコードへの変換時にエスケープシーケンスを付けないようにすることはできない。
« [R]10年ごとに最も多くホームランを放ったプレイヤー(「Rによるセイバーメトリクス入門」(技術評論社)pp.59-61) | トップページ | [R]5,000打数以上経験した全プレイヤーの三振率とホームラン率(「Rによるセイバーメトリクス入門」(技術評論社)pp.61-63) »
「R(文字と文字列)」カテゴリの記事
- [R]同じ文字列を繰り返した文字列を作成する(2026.02.02)
- [R]文字列が数値に変換できるかどうか判定する(2025.12.31)
- [R]文字列の長さを得る(2025.12.30)
- [R]空白を追加した指定の長さの文字列を得る(2025.12.26)
- [R]文字列型ベクトルの要素を連結して文字列を作る(2025.12.17)
« [R]10年ごとに最も多くホームランを放ったプレイヤー(「Rによるセイバーメトリクス入門」(技術評論社)pp.59-61) | トップページ | [R]5,000打数以上経験した全プレイヤーの三振率とホームラン率(「Rによるセイバーメトリクス入門」(技術評論社)pp.61-63) »

コメント