ローカライゼーション
まずは前提として、コンピュータにおけるローカライゼーションとはソフトウェアを開発した環境とは別の環境に適合させることです。
これは国際化や地域化と言われるものです。
情報処理における国際化と地域化(こくさいか と ちいきか)は、ソフトウェアを開発した環境とは異なる環境、特に外国や異文化に適合させる手段である。
ロケール
ローカライゼーションに対応するための情報はロケール(地域情報)と言われます。
これを当該地域に合わせることによって、言語や通貨、表示仕様などを適用させます。
ロケールはカテゴリごとに環境変数で設定されていますが、全てのカテゴリをまとめてLANGまたはLC_ALLの環境変数に設定されている場合もあります。
私のCentOS7環境ではLANGにて設定されていました。
カテゴリはlocaleコマンドにより表示することができます。
・表示例
[wantan@localhost ~]$ locale LANG=ja_JP.UTF-8 LC_CTYPE="ja_JP.UTF-8" LC_NUMERIC="ja_JP.UTF-8" LC_TIME="ja_JP.UTF-8" LC_COLLATE="ja_JP.UTF-8" LC_MONETARY="ja_JP.UTF-8" LC_MESSAGES="ja_JP.UTF-8" LC_PAPER="ja_JP.UTF-8" LC_NAME="ja_JP.UTF-8" LC_ADDRESS="ja_JP.UTF-8" LC_TELEPHONE="ja_JP.UTF-8" LC_MEASUREMENT="ja_JP.UTF-8" LC_IDENTIFICATION="ja_JP.UTF-8" LC_ALL=
■ロケールの主要カテゴリ
カテゴリ | 内容 |
---|---|
LC_CTYPE | 文字の種類、分類 |
LC_NUMERIC | 数値の書式 |
LC_TIME | 日付時間の書式 |
LC_COLLATE | 文字の照合や整列 |
LC_MONETARY | 通貨の書式 |
LC_MESSAGES | 出力メッセージの言語 |
LC_NAME | 名前の書式 |
LC_ADDRESS | アドレスの書式 |
LC_TELEPHONE | 電話番号の書式 |
また、ロケールには以下の設定ファイルもあります。
※重要度はいまいちわからない
/etc/locale.conf
文字コード
そもそもの文字コード
文字コード自体は、本気で学習しようとするとかなり深さがある内容ですが、ここではLPICの範囲に従い軽くさらいます。
そもそも文字コードとはビット列と文字を相互に変換する一連のルールのことを指します。
この文字コードというルールは大きく2つの要素から成ります。
参照するものによって、微妙に表記ゆれがあるような気がしますが、ここでは「符号化文字集合(CCS)」と「文字符号化方式(CES)」とします。
・符号化文字集合
文字と一意に振られた番号のペアの集合。
・文字符号化方式
文字に振られた番号をバイト表現に変換する方法。
以下が私がもったイメージです。
符号化文字集合に対して複数の文字符号化方式が適用できるケースがあります。
これがUnicodeに対するUTF-8やUTF-16の関係です。
この辺はネットで検索しようとすると、サイトによって言葉の定義や説明にばらつきがあり混乱する可能性があります。
資格試験のために勉強するのであればその参考書や文字コード自体をしっかりと学習したい場合には専門書や有識者にきいてみるのが正確に理解するための近道な気がします。
何はともあれ、ここでは単に文字コードと言った場合には文字符号化方式の名称を使うことにします。
Unicode→文字コードではない
UTF-8,Shift-Jis→文字コードである
Linuxにおける文字コード
Linuxにおける(試験的に)主要な文字コードには以下のような種類があります。
文字コード | 内容 |
---|---|
ASCⅡ | 7ビット表記128文字の文字コード。国際標準規格。 |
ISO-8859 | ASCⅡの拡張版。256文字対応。 |
UTF-8 | Unicodeを使用した文字コード。 ASCⅡの互換性をもつ。 |
EUC-JP | 拡張UNIXと言われ、UNIX環境上で日本語、中国語などに対応。 |
Shift-JIS | JISに定められた標準の日本語文字コード |
最近のLinuxディストリビューションでは多くの場合、UTF-8が標準として設定されていることが多いようです。
■iconv コマンド
WindowsマシンとLinuxマシンでファイルを扱う場合、Windowsマシンでは多くの場合はShift-Jisが標準文字コードとなっているため、文字化けが発生する可能性があります。
このような場合に、iconvコマンドを使用することにより文字コードの変換を行うことができます。
・iconvコマンドオプション
オプション | 内容 |
---|---|
-f | 変換前の文字コードを指定 |
-t | 返還後の文字コードを指定 |
-l | 扱える文字コードを表示 |
fはfrom、tはtoを指すことを意識していれば比較的覚えやすいオプションかと思います。
・使用できる文字コードを表示
[wantan@localhost ~]$ iconv -l 以下のリストには、全ての既知の文字集合が含まれています。これらの名前は コマンドラインパラメータの FROM と TO の全ての組み合わせとして使用出来 るとは限りません。ある文字集合は複数の異なった名前 (別名、alias) で リストされています。 ## 部分抜粋 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, ## 省略
・ファイルの文字コードを変換する
今回の例では文字コードを「UTF-8→EUC-JP」に変換します。
ファイルの現在の文字コードはfileコマンドにより確認しました。
[wantan@localhost ~]$ file -i test111.txt test111.txt: text/plain; charset=utf-8 [wantan@localhost ~]$ iconv -f UTF-8 -t EUC-JP test111.txt test テスト
上記の出力結果から分かるようにiconvコマンドの標準出力はディスプレイ表示されるので、ファイルとし変換(保存)する場合には、リダイレクトを指定する必要があります。
[wantan@localhost ~]$ iconv -f UTF-8 -t EUC-JP test111.txt > eucjpfile.txt [wantan@localhost ~]$ file -i eucjpfile.txt eucjpfile.txt: text/plain; charset=iso-8859-1
タイムゾーン
試験区分的にはローカライゼーションの分野に入るようですが、NTPを扱うときに改めてまとめた方がいいかなと思ったのでほんとにさらっと。
■タイムゾーン情報ファイル
タイムゾーンの情報ファイルは/usr/share/zoneinfo/配下にバイナリファイルとして格納されています。
[wantan@localhost ~]$ ls /usr/share/zoneinfo/ Africa Canada GB Indian Mexico ROK iso3166.tab America Chile GB-Eire Iran NZ Singapore leapseconds Antarctica Cuba GMT Israel NZ-CHAT Turkey posix Arctic EET GMT+0 Jamaica Navajo UCT posixrules Asia EST GMT-0 Japan PRC US right Atlantic EST5EDT GMT0 Kwajalein PST8PDT UTC tzdata.zi Australia Egypt Greenwich Libya Pacific Universal zone.tab Brazil Eire HST MET Poland W-SU zone1970.tab CET Etc Hongkong MST Portugal WET CST6CDT Europe Iceland MST7MDT ROC Zulu
■タイムゾーンの変更
まず現在のタイムゾーンについてはtimedatectlコマンドにより確認することができます。
timedatectlについては別途扱うのでここではタイムゾーンを確認するだけ。
・現在のタイムゾーンを確認
[wantan@localhost ~]$ timedatectl status Local time: 金 2020-12-04 03:13:30 JST Universal time: 木 2020-12-03 18:13:30 UTC RTC time: 木 2020-12-03 18:07:00 Time zone: Asia/Tokyo (JST, +0900) NTP enabled: yes NTP synchronized: no RTC in local TZ: no DST active: n/a
ここから、さきほどのバイナリファイルを「/etc/localtime」へコピーすることによりタイムゾーンの変更を行います。
・タイムゾーン変更例
[wantan@localhost ~]$ cp /usr/share/zoneinfo/America/ /etc/localtime
または、コピーではなくシンボリックリンクをはるでもよいようです。
私のCentOS7環境では、デフォルトがシンボリックリンクによりライムゾーンの設定がされていました。
[wantan@localhost ~]$ ll /etc/localtime lrwxrwxrwx. 1 root root 32 7月 3 09:00 /etc/localtime -> ../usr/share/zoneinfo/Asia/Tokyo
一時的に時刻を変更したい場合には環境変数に設定することで実現することもできます。
[root@localhost wantan]# export TZ=America [root@localhost wantan]# date 2020年 12月 3日 木曜日 18:22:53 America
ーーーーーーーーーーーーーーーーーーーーーーー
・前回(第六回)
www.wantanblog.com
・次回(第八回)
www.wantanblog.com