Linuxで、nkfコマンドを使用して、文字コードを変換します。
記事の目次
nkfコマンドをインストールする!
nkfコマンドは、Ubuntuではaptコマンドでインストールできます。
$ sudo apt install nkf
RHELはやっかいです。RHEL 8以前はCodeReadyのリポジトリを使用したり、ソースからコンパイルする必要があります。RHEL 9は、EPELのリポジトリが使用できます。以下の記事を参考にして、EPELのリポジトリを登録します。
$ sudo dnf install nkf
nkfでASCII文字をSJISからUTF-8に変換する!
nkfでASCII文字をSJSIからUTF-8に変換してみます。文字コードは変換されることなく、iconvで発生するバックスラッシュとチルダの問題のようにクセのある変換は発生しません。
$ cat ascii_sjis.txt !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ $ nkf -w ascii_sjis.txt !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
nkfで半角カタカナをSJISからUTF-8に変換する!
今度は、半角カタカナをSJISからUTF-8に変換してみましょう。iconvとくらべてみます。
$ iconv -f sjis -t utf8 hankata_sjis.txt 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚ $ nkf -w hankata_sjis.txt 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜
nkfでは全角になってしまいます。「-x」オプションを付加して半角のままUTF-8に変換します。
$ nkf -wx hankata_sjis.txt 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゙゚
nkfコマンドで使用できる文字コードを確認する!
nkfコマンドが対応している文字コードは、コマンドのヘルプで確認することができます。
$ nkf --help Usage: nkf -[flags] [--] [in file] .. [out file for -O flag] j/s/e/w Specify output encoding ISO-2022-JP, Shift_JIS, EUC-JP UTF options is -w[8[0],{16,32}[{B,L}[0]]] J/S/E/W Specify input encoding ISO-2022-JP, Shift_JIS, EUC-JP UTF option is -W[8,[16,32][B,L]] m[BQSN0] MIME decode [B:base64,Q:quoted,S:strict,N:nonstrict,0:no decode] M[BQ] MIME encode [B:base64 Q:quoted] f/F Folding: -f60 or -f or -f60-10 (fold margin 10) F preserve nl Z[0-4] Default/0: Convert JISX0208 Alphabet to ASCII 1: Kankaku to one space 2: to two spaces 3: HTML Entity 4: JISX0208 Katakana to JISX0201 Katakana X,x Convert Halfwidth Katakana to Fullwidth or preserve it O Output to File (DEFAULT 'nkf.out') L[uwm] Line mode u:LF w:CRLF m:CR (DEFAULT noconversion) --ic=<encoding> Specify the input encoding --oc=<encoding> Specify the output encoding --hiragana --katakana Hiragana/Katakana Conversion --katakana-hiragana Converts each other --{cap, url}-input Convert hex after ':' or '%' --numchar-input Convert Unicode Character Reference --fb-{skip, html, xml, perl, java, subchar} Specify unassigned character's replacement --in-place[=SUF] Overwrite original files --overwrite[=SUF] Preserve timestamp of original files -g --guess Guess the input code -v --version Print the version --help/-V Print this help / configuration Network Kanji Filter Version 2.1.4 (2015-12-12) Copyright (C) 1987, FUJITSU LTD. (I.Ichikawa). Copyright (C) 1996-2015, The nkf Project.
おわりに
nkfコマンドは、iconvよりストレートな変換を行いますが、半角カタカナは全角に変換されます。文字コード変換はコマンド特有の特徴があるので、本格的に使用する際には変換パターンを事前に調査して使用する必要があります。
関連記事