ある種の元データがGB2312エンコードとの説明を受けていて、それをちょっとした処理の都合上でUnicode(UTF-16LE)に変換しようとしたら変換できずにハマったのでメモしておく。
手元のマシンはWindows Subsystem for Linux入りなので、こういう文字コード変換はbashを起動して次のように実行する。
iconv -f GB2312 -t UTF-16LE ファイル名 > 出力ファイル名
しかし実際にやってみると iconv: illegal input sequence at position 132 というエラーが出て変換できない。
どうやら、GB2312といいつつGB18030の範囲の文字が含まれていたようなので、次のようにGB18030と指定して変換したら意図通りに動いた。
iconv -f GB18030 -t UTF-16LE ファイル名 > 出力ファイル名
なおUTF-16LE に変換できたところまでは良かったのだけど、実は UTF-8 のほうが目的に合致していたので再度変換しなおした。