なかなか便利なコマンド「iconv」

【連載】

にわか管理者のためのLinux運用入門

【第95回】なかなか便利なコマンド「iconv」

[2017/10/10 13:00]後藤大地 ブックマーク ブックマーク

サーバ/ストレージ

最近は少なくなったように思うが、以前はテキストファイルの中身を確認できないことがしばしばあった。これは、ログイン環境に設定されているエンコーディングと違うエンコーディングのデータであることが原因だ。日本であればWindowsはCP932、macOSであればUTF-8、Linuxも最新のディストリビューションのほとんどはUTF-8を使っているだろう。つまり、何も考えずにWindowsで作成したテキストファイルをmacOSやLinuxで閲覧しようとすると、次のように文字化けすることになる。

エンコーディングが違うと文字化けする

最近だと、Webブラウザで保存したHTMLテキストファイルの中身をページャで表示することができないとか、そういったケースが多いように思う。Webページのエンコーディングはさまざまなので、システムのデフォルトエンコーディングと違っていると表示できないことがあるのだ。賢いモダンエディタを使っていれば表示できないことはあまりないが、ターミナルで見ようとするとダメ、というケースはあるだろう。

データのエンコーディングを判断して自動的に変換するタイプのページャを使っていればエンコーディングが違っていても自動的に処理してくれる。だが、そうした機能を持たないデフォルトのページャを使っていると、やはり次のように文字化けしてしまう。

エンコーディングが違うと、ページャでも文字化けする

こうした場合に使えるコマンドがiconvコマンドだ。iconvは、アプリケーションからエンコーディング変換を行うためのライブラリとしても使われることが多く、ほとんどのディストリビューションでiconvのライブラリとコマンドが利用できる。

このiconvコマンドで主に使うオプションは、「-t」と「-f」だ。-tオプションにデータのエンコーディングを指定し、-fオプションに変換後のエンコーディングを指定する。例えば、次のように指定して実行するとCP932のテキストファイルをUTF-8に変換することができる。

この環境のエンコーディングはUTF-8なので、文字化けが解消されて閲覧できるようになる

日本語に限れば、ほかにも変換用のコマンドや変換目的にも利用できるページャなどがあるが、とりあえずiconvの使い方を覚えておけばよいだろう。iconvで指定できるエンコーディングはさまざまだ。-lオプションを指定すると、インストールされているiconvで利用できるエンコーディング名を次のように一覧表示させることができる。

# iconv -l
以下のリストには,全ての既知の文字集合が含まれています。これらの名前は
コマンドラインパラメータの FROM と TO の全ての組み合わせとして使用出来
るとは限りません。ある文字集合は複数の異なった名前 (別名,alias) で
リストされています。

 437, 500, 500V1, 850, 851, 852, 855, 856, 857, 860, 861, 862, 863, 864, 865,
  866, 866NAV, 869, 874, 904, 1026, 1046, 1047, 8859_1, 8859_2, 8859_3, 8859_4,
  8859_5, 8859_6, 8859_7, 8859_8, 8859_9, 10646-1:1993, 10646-1:1993/UCS4,
  ANSI_X3.4-1968, ANSI_X3.4-1986, ANSI_X3.4, ANSI_X3.110-1983, ANSI_X3.110,
  ARABIC, ARABIC7, ARMSCII-8, ASCII, ASMO-708, ASMO_449, BALTIC, BIG-5,
...略...
  CSDECMCS, CSEBCDICATDE, CSEBCDICATDEA, CSEBCDICCAFR, CSEBCDICDKNO,
  CSEBCDICDKNOA, CSEBCDICES, CSEBCDICESA, CSEBCDICESS, CSEBCDICFISE,
  CSEBCDICFISEA, CSEBCDICFR, CSEBCDICIT, CSEBCDICPT, CSEBCDICUK, CSEBCDICUS,
  CSEUCKR, CSEUCPKDFMTJAPANESE, CSGB2312, CSHPROMAN8, CSIBM037, CSIBM038,
  CSIBM273, CSIBM274, CSIBM275, CSIBM277, CSIBM278, CSIBM280, CSIBM281,
...略...
  EBCDIC-AT-DE-A, EBCDIC-AT-DE, EBCDIC-BE, EBCDIC-BR, EBCDIC-CA-FR,
  EBCDIC-CP-AR1, EBCDIC-CP-AR2, EBCDIC-CP-BE, EBCDIC-CP-CA, EBCDIC-CP-CH,
  EBCDIC-CP-DK, EBCDIC-CP-ES, EBCDIC-CP-FI, EBCDIC-CP-FR, EBCDIC-CP-GB,
  EBCDIC-CP-GR, EBCDIC-CP-HE, EBCDIC-CP-IS, EBCDIC-CP-IT, EBCDIC-CP-NL,
  EBCDIC-CP-NO, EBCDIC-CP-ROECE, EBCDIC-CP-SE, EBCDIC-CP-TR, EBCDIC-CP-US,
...略...
  IBM-1122, IBM-1123, IBM-1124, IBM-1129, IBM-1130, IBM-1132, IBM-1133,
  IBM-1137, IBM-1140, IBM-1141, IBM-1142, IBM-1143, IBM-1144, IBM-1145,
  IBM-1146, IBM-1147, IBM-1148, IBM-1149, IBM-1153, IBM-1154, IBM-1155,
  IBM-1156, IBM-1157, IBM-1158, IBM-1160, IBM-1161, IBM-1162, IBM-1163,
  IBM-1164, IBM-1166, IBM-1167, IBM-1364, IBM-1371, IBM-1388, IBM-1390,
...略...
  ISO-IR-10, ISO-IR-11, ISO-IR-14, ISO-IR-15, ISO-IR-16, ISO-IR-17, ISO-IR-18,
  ISO-IR-19, ISO-IR-21, ISO-IR-25, ISO-IR-27, ISO-IR-37, ISO-IR-49, ISO-IR-50,
  ISO-IR-51, ISO-IR-54, ISO-IR-55, ISO-IR-57, ISO-IR-60, ISO-IR-61, ISO-IR-69,
  ISO-IR-84, ISO-IR-85, ISO-IR-86, ISO-IR-88, ISO-IR-89, ISO-IR-90, ISO-IR-92,
  ISO-IR-98, ISO-IR-99, ISO-IR-100, ISO-IR-101, ISO-IR-103, ISO-IR-109,
...略...
  JIS_C6229-1984-B, JIS_C62201969RO, JIS_C62291984B, JOHAB, JP-OCR-B, JP, JS,
  JUS_I.B1.002, KOI-7, KOI-8, KOI8-R, KOI8-RU, KOI8-T, KOI8-U, KOI8, KOI8R,
  KOI8U, KSC5636, L1, L2, L3, L4, L5, L6, L7, L8, L10, LATIN-9, LATIN-GREEK-1,
  LATIN-GREEK, LATIN1, LATIN2, LATIN3, LATIN4, LATIN5, LATIN6, LATIN7, LATIN8,
  LATIN9, LATIN10, LATINGREEK, LATINGREEK1, MAC-CENTRALEUROPE, MAC-CYRILLIC,
...略...
  OSF10020367, OSF10020370, OSF10020387, OSF10020388, OSF10020396, OSF10020402,
  OSF10020417, PT, PT2, PT154, R8, R9, RK1048, ROMAN8, ROMAN9, RUSCII, SE, SE2,
  SEN_850200_B, SEN_850200_C, SHIFT-JIS, SHIFT_JIS, SHIFT_JISX0213, SJIS-OPEN,
  SJIS-WIN, SJIS, SS636127, STRK1048-2002, ST_SEV_358-88, T.61-8BIT, T.61,
  T.618BIT, TCVN-5712, TCVN, TCVN5712-1, TCVN5712-1:1993, THAI8, TIS-620,
  TIS620-0, TIS620.2529-1, TIS620.2533-0, TIS620, TS-5881, TSCII, TURKISH8,
  UCS-2, UCS-2BE, UCS-2LE, UCS-4, UCS-4BE, UCS-4LE, UCS2, UCS4, UHC, UJIS, UK,
  UNICODE, UNICODEBIG, UNICODELITTLE, US-ASCII, US, UTF-7, UTF-8, UTF-16,
  UTF-16BE, UTF-16LE, UTF-32, UTF-32BE, UTF-32LE, UTF7, UTF8, UTF16, UTF16BE,
  UTF16LE, UTF32, UTF32BE, UTF32LE, VISCII, WCHAR_T, WIN-SAMI-2, WINBALTRIM,
  WINDOWS-31J, WINDOWS-874, WINDOWS-936, WINDOWS-1250, WINDOWS-1251,
  WINDOWS-1252, WINDOWS-1253, WINDOWS-1254, WINDOWS-1255, WINDOWS-1256,
  WINDOWS-1257, WINDOWS-1258, WINSAMI2, WS2, YU

大丈夫、大丈夫だ! エンコーディング名を全て覚える必要はない。細かい説明は省くが、大体次の5種類あたりについて知っておけば十分だ。

エンコーディング 説明
UTF-8、UTF8 Unicodeのエンコーディング方式の1つ
CP932、MS932 SHIFT_JISを拡張したもの。Windowsで使われる
SHIFT_JIS、SHIFT-JIS、SJIS シフトJIS
EUC-JP、EUCJP 日本語拡張UNIXコード。UNIX系OSで使われていた
ISO-2022-JP、ISO2022JP 通信で使われることがある

最低限のエンコーディングとして「WindowsはCP932」「macOSとLinuxはUTF-8」、こう覚えておけばよいだろう。補足すると、SHIFT_JISはCP932のようなもの(CP932がSHIFT_JISを拡張している)で、EUC-JPはUTF-8が普及する前にUNIX系OSで使われていたものだ。

EUC-JPについて知っておく必要があるのは、古いコマンドがそのまま使われているようなUNIX系OSだと、UTF-8は利用できず、EUC-JPでないと動かないケースがあることだ。そういったシステムを使う場合にはEUC-JPに合わせる必要があるし、テキストデータもEUC-JPに変換する必要がある。

現在ではUTF-8が広く利用できるため、いったんUTF-8に変換してしまえばいろいろ使えるだろう。文字化けして困るようなことは最近減ったので、iconvコマンドを実行する機会はそれほどないとは思う。しかし、万一の際にiconvコマンドの使い方を知っているのと知らないのとでは雲泥の差だ。エンコーディングを変換するコマンドとしてiconvの存在は覚えておいていただきたい。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
3146
2
【連載】にわか管理者のためのLinux運用入門 [95] なかなか便利なコマンド「iconv」
最近は少なくなったように思うが、以前はテキストファイルの中身を確認できないことがしばしばあった。これは、ログイン環境に設定されているエンコーディングと違うエンコーディングのデータであることが原因だ。今回は、そうした場合に使えるiconvコマンドを紹介しよう。
https://news.mynavi.jp/itsearch/assets_c/2017/10/Linux95_002-thumb-400xauto-14689.jpg
最近は少なくなったように思うが、以前はテキストファイルの中身を確認できないことがしばしばあった。これは、ログイン環境に設定されているエンコーディングと違うエンコーディングのデータであることが原因だ。今回は、そうした場合に使えるiconvコマンドを紹介しよう。

会員登録(無料)

セキュリティ・キャンプ2017 - 精彩を放つ若き人材の『今』に迫る
ぼくらのディープラーニング戦争
ドローンのポテンシャル、メーカーやキャリア、ユーザー企業はこう見る
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
人事・経理・総務で役立つ! バックオフィス系ソリューション&解説/事例記事まとめ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る