技術ブログ
技術ブログ
Oracle Database 12cの新機能を調べているなかで、文字コード関連の意外なツールを見つけたので共有します。
LCSSCAN (Language and Character Set File Scanner)と呼ばれるテキストファイルの文字コードをチェックするツールです。
このツールがテキストファイルの文字コード判定に使用できます。私はテキストファイルの文字コード判定にnkf --guessを使用していたのですが、Oracle Databaseがインストールされているが、nkfをインストールできない環境に有効かもしれません(odで文字コードを判定できるバイナリアンなら不要なツールですね!)
[oracle@l64rw3 tmp]$ cat const_utf8.txt 日本国憲法 (昭和二十一年十一月三日憲法) 日本国民は、正当に選挙された国会における代表者を通じて行動し、われらとわれら の子孫のために、諸国民との協和による成果と、わが国全土にわたつて自由のもたらす恵 沢を確保し、政府の行為によつて再び戦争の惨禍が起ることのないやうにすることを決意 し、ここに主権が国民に存することを宣言し、この憲法を確定する。そもそも国政は、国 民の厳粛な信託によるものであつて、その権威は国民に由来し、その権力は国民の代表者 がこれを行使し、その福利は国民がこれを享受する。これは人類普遍の原理であり、この 憲法は、かかる原理に基くものである。われらは、これに反する一切の憲法、法令及び詔 勅を排除する。 日本国民は、恒久の平和を念願し、人間相互の関係を支配する崇高な理想を深く自覚す るのであつて、平和を愛する諸国民の公正と信義に信頼して、われらの安全と生存を保持 しようと決意した。われらは、平和を維持し、専制と隷従、圧迫と偏狭を地上から永遠に 除去しようと努めてゐる国際社会において、名誉ある地位を占めたいと思ふ。われらは、 全世界の国民が、ひとしく恐怖と欠乏から免かれ、平和のうちに生存する権利を有するこ とを確認する。 われらは、いづれの国家も、自国のことのみに専念して他国を無視してはならないので あつて、政治道徳の法則は、普遍的なものであり、この法則に従ふことは、自国の主権を 維持し、他国と対等関係に立たうとする各国の責務であると信ずる。 日本国民は、国家の名誉にかけ、全力をあげてこの崇高な理想と目的を達成することを 誓ふ。 ※:改行入れてます
lcsscanを実行します。
[oracle@l64rw3 tmp]$ lcsscan FILE=const_utf8.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_utf8.txt: JAPANESE UTF8;
日本語のUTF-8であると判定されました。 ちなみにnkf --guessでは、言語は判定されませんが、改行コードが判定されています。
[oracle@l64rw3 tmp]$ nkf --guess const_utf8.txt UTF-8 (LF)
UTF-8以外のシフトJIS、JIS(ISO-2022-JP), 日本語EUCについても試してみます。
[oracle@l64rw3 tmp]$ nkf --sjis const_utf8.txt > const_sjis.txt [oracle@l64rw3 tmp]$ nkf --jis const_utf8.txt > const_jis.txt [oracle@l64rw3 tmp]$ nkf --euc const_utf8.txt > const_euc.txt [oracle@l64rw3 tmp]$ lcsscan FILE=const_sjis.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_sjis.txt: JAPANESE JA16SJIS; [oracle@l64rw3 tmp]$ lcsscan FILE=const_euc.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_euc.txt: JAPANESE JA16EUC; [oracle@l64rw3 tmp]$ lcsscan FILE=const_jis.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_jis.txt: JAPANESE ISO2022-JP; [oracle@l64rw3 tmp]$ nkf --guess const_sjis.txt Shift_JIS (LF) [oracle@l64rw3 tmp]$ nkf --guess const_euc.txt EUC-JP (LF) [oracle@l64rw3 tmp]$ nkf --guess const_jis.txt ISO-2022-JP (LF)
それぞれ適切に判定されています。JISが判定できるのはちょっと意外でした。
先にも触れていますが、シフトJISでありがちな改行コードの違いについては判定してくれません。 この点はnkf --guessが便利ですが、これこそ odで確認すればよいもかもしれませんね。
[oracle@l64rw3 tmp]$ nkf --sjis const_utf8.txt > const_sjis.txt [oracle@l64rw3 tmp]$ nkf --sjis --windows const_utf8.txt > const_sjis_crlf.txt [oracle@l64rw3 tmp]$ nkf --guess const_sjis.txt Shift_JIS (LF) [oracle@l64rw3 tmp]$ nkf --guess const_sjis_crlf.txt Shift_JIS (CR) [oracle@l64rw3 tmp]$ lcsscan FILE=const_sjis.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_sjis.txt: JAPANESE JA16SJIS; [oracle@l64rw3 tmp]$ lcsscan FILE=const_sjis_crlf.txt Language and Character Set File Scanner v2.1 (c) Copyright 2003, 2013 Oracle Corporation. All rights reserved. const_sjis_crlf.txt: JAPANESE JA16SJIS;