マンガでよめる痔のこと・薬のこと

あるテキストファイルの日本語が文字化けしてしまったので、
試しにwindowsのクライアントにダウンロードしてIEで開いて確かめたところ、
ユニコード(UTF-8)にて正常に見ることができました。
しかし、Linuxに戻って、ロケールを
ja_JP.utf8にしてみてもいぜんとして化けたままです。
どのようにして、Linuxでの文字コードを確認することができるのでしょうか?

このQ&Aに関連する最新のQ&A

A 回答 (3件)

もしもコマンドラインから


> setenv LANG ja_JP.utf8
などのように入力したなら、場合によって、「ja_JP.utf8」の部分が違っているかもしれません。私の環境では、「ja_JP.utf8」ではなく、「ja_JP.UTF-8」になっていました。このあたりは、localeファイルを確認すれば分かると思います。
一応、「env」などのコマンド(csh系)でロケールの設定を表示させることができますが、これは、存在しないロケールを指定しても、そのまま、その文字列を返すだけなので、あまり意味がないようです。

また、仮に正しくロケールの設定が出来たとしても、例えばktermなどのシェルはUTFコードに対応していないので、表示できないようです。やはり、UTFコード対応のエディタなどで開くか、nkfを通すのが良いのではないかと思います。
    • good
    • 1

nkf 通して見るとか。


あるいは more や less の代わりに lv で見るとか。

それでも化ける場合は、端末の文字セットが utf8 になっていない可能性があると思います。(たとえば Windows マシンから TeraTerm で telnet ログインした場合、日本語EUCかシフトJISしか設定できないので LANG を ja_JP.UTF8 などにすると化けます)。
    • good
    • 0
この回答へのお礼

nkfがよくわからないのですが、
ちょっと調べてみます。

ありがとうございました

お礼日時:2005/07/14 13:25

いま、手元にLinux環境がないので検証できませんが、fileコマンドで文字コードが判別できませんでしたっけ。



$ file filename.txt
filename.txt: UTF-8 Unicode text
のようにして利用します。
    • good
    • 1
この回答へのお礼

残念ながらだめみたいです・・・

お礼日時:2005/07/14 13:24

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qサーバの文字コードを知りたい

こんにちは。
HP-UX を使っておりますが、サーバに設定されている文字コードってどうやって知れば良いのでしょうか?

HP-UX の場合、多くは S-JIS が使われているという話や、実際に Windows からテキストをアップロードする際には ascii/無変換 でうまく行く事から、おそらく S-JIS だろうと想像はつくのですが、確実に確認できる方法が知りたいのです。

よろしくお願い致します。

Aベストアンサー

一般論としては、UNIX では EUC が確かに基本ですが、HP-UX の場合は S-JIS が基本です。

判別方法は、環境変数 LANG がどうなっているかを見てください。

これが ja_JP.EUC-JP なら EUC、ja_JP.SJIS なら S-JIS です。(←昔のことなので記憶が曖昧ですが…)

Q起動しているサービスを確認するコマンド

初歩的な質問で恐縮ですが、ご教示いただけますと幸いです。

起動しているサービスを確認するために以下の2つのコマンドを打ってみるのですが、結果(出て来るサービス名)が違います。
このコマンドの違いについてご教示いただけますでしょうか。

(1)service --status-all
(2)chkconfig --list

Aベストアンサー

(1)service --status-all

サービスの現在のステータスを調べるコマンド

(2)chkconfig --list

OSのブート時に自動起動するサービスを調べるコマンド

違いが出るのは、
・ブート後に手動あるいは他のコマンドから起動したサービス
・ブート後に手動あるいは他のコマンドから、あるいはエラーで停止したサービス
・ブート後に実行はされるがすぐに停止して常駐しないサービス (ntpdate とか)

あるいは、(1)ではサービス名が表示されない物もあるので、どのサービスがどんなステータス出力をするのか知っておく必要もありますね。(service network statusとか)

Qgrepで全角文字の行を抽出

grepの検索でテキスト内のひとつでも全角文字がある行を
抽出したいと思ってます。1つの方法は見つかったのですが、
時たまバグがあるそうですので、
他の方法を探そうと思ってます。
わかっている方法は、以下のとおりです。
> grep -n '.*[^ -~。-゜].*' test_data.txt

よろしくお願いします。

Aベストアンサー

「ASCIIに含まれる文字だけ」の行以外という案で、
LANG=C で、ロケール(言語)を英語にした上で、grep -v で除外を指定。

LANG=C grep -n -v '^[[:cntrl:][:print:]]*$' test_data.txt

Qシェルの引数の入力チェックをしたい・・

シェルは初心者のため、ご教授ください。

3つの引数を受け取り、値のチェックを行いたいのですが書き方がよくわかりません・・。

やりたいチェックは、
第1引数は 数字じゃなければエラー
第2引数は 文字列が "YES" か "NO"でなければエラー
第3引数は 日付のフォーマットチェック(YYYY/MM/DD以外はエラー)
です。よろしくお願いします。

Aベストアンサー

1)数字以外を削除して元と同じなら数字のみだとわかる

A=`echo "$1" | sed 's/[^0-9]//g'`
if test "$1" = "$A"
then echo 数字だけ
else echo エラー
fi

2)
if test "$2" = YES -o "$2" = NO
then echo YES か NO
else echo エラー
fi

3)
これは難しい。gnu date (Linux等のdate)を前提とすれば出来ます。
A=`date +%Y/%m/%d -d "$3"`
if test "$3" = "$A"
then echo YYYY/MM/DD形式の日付データ
else echo エラー
fi

gnu date が無いと、大の月・小の月・うるう年などを地道に調べる必要あり。

QUTF-8とASCIIコードにおける互換性について

UTF-8とASCIIはそのASCIIコードの範囲のおいて
互換性を持ちます。(と、書籍や多種な文献にはそういった記述があります)

たとえば【A】という文字をUTF-8で符号化した際は【41】(16進数で)
さらにASCIIコードでも【41】という値がAという文字に割り当てられています。
確かに、一件互換しているようにみえますが、UTF-8っていうことは最終的には
Unicode上のコードポイントの値・・・つまり0x0041という値に復元?(というのでしょうか)するわけですよね?
でそのUnicodeの文字集合上から復元したコードポイントに対応する文字を参照しAという文字をみつけてくると・・・。
これって【A】という文字をUTF-8で符号化した歳のバイト列はASCIIと一致しているけれど
結局Unicodeコードポイントに直した場合【00】という上位バイトが無駄にくっついてきて【0x0041】となり
互換性がなくなるのではとおもったのですが・・・。

これはどういう意味の互換性なのでしょうか?
識者の方ご教授ください。
お願い致します。

Aベストアンサー

No1,3,6です。

>とあった時、おそらくどの言語でもそうだと思うのですが、スクリプトファイル内の特定の文字列はそれぞれ個別にエンコーディング情報を持つと思います。(※言語によっては持たいない?)

持たないのが普通です。
文字列個別にエンコード情報を持つのは、メジャーな言語だとRubyくらい?
他の言語では、プログラム中では1つのプログラム中では一種類のエンコードしか扱えません。もしくは、言語は全くエンコードを関知せず、すべてプログラマが管理するか。

最初の疑問に戻って、
「UTF-8とASCIIはそのASCIIコードの範囲において互換性を持ちます。」
というのは、
「ASCIIコードの範囲の文字を、ASCIIでエンコードしても、UTF-8でエンコードしても、全く同じ値になる」という意味であり、それ以上でも以下でも無いです。
別の言い方をすると、ASCIIコードの範囲の文字しか含まれないファイルであれば、そのファイルのエンコードがASCIIだとかUTF-8だとか、さらに(バックすらスラッシュ等)一部の記号を除けばSHIFT_JISだとかeuc-jpだとかいうのも区別できないというか同じです。

No1,3,6です。

>とあった時、おそらくどの言語でもそうだと思うのですが、スクリプトファイル内の特定の文字列はそれぞれ個別にエンコーディング情報を持つと思います。(※言語によっては持たいない?)

持たないのが普通です。
文字列個別にエンコード情報を持つのは、メジャーな言語だとRubyくらい?
他の言語では、プログラム中では1つのプログラム中では一種類のエンコードしか扱えません。もしくは、言語は全くエンコードを関知せず、すべてプログラマが管理するか。

最初の疑問に戻って、
「UTF-8とASC...続きを読む

QLD_LIBRARY_PATHって?

環境変数で「LD_LIBRARY_PATH」というのがあるかと思うのですが、この変数はOSが使用する変数なのでしょうか?それとも単一、あるいは複数のアプリケーションソフト(ORACLEなどのような)が使用する変数なのでしょうか?
基本的な質問で申し訳ありませんが、教えてください。

Aベストアンサー

OSが使用する変数です。リンク時または実行時にリンクする共有ライブラリを探すために使用されます。

LD_LIBRARY_PATHが設定されていない場合、ダイナミックローダーは/libや/usr/lib等に存在するライブラリを検索しますが、それ以外の場所に存在するライブラリを見つける事ができません。

実行プログラムが32ビットの場合はLD_LIBRARY_PATHが、64ビットの場合でLD_LIBRARY_PATH_64が設定されている場合はこちらが使用されます。

なお、リンク時パスや実行時パスはコンパイル時に設定することもできます。

Qupdate文で改行を入れる

こんにちは。
いつもお世話になっています。

update文を使用して、データに改行を入れたいのですが、どうすればよいでしょうか。

対象列のデータ型はVARCHAR2です。

例えばSQLPLUSから、
SPL>update 「テーブル名」set 「対象列」='あ改行い改行う改行'
を投入し、そのあと
select 「対象列」 from 「テーブル名」
とすると
SQL>あ
SQL>い
SQL>う
と出てくればよいんですが、
SQL>update 「テーブル名」set 「対象列」='あ\nい\nう\n'
としても
SQL>あ\nい\nう\n
と、「\n」が文字列としてでてきてしまいます。

SPL>update 「テーブル名」set 「対象列」='あ
2い
3う'
と投入すると、期待通りになるのですが、
そうではなく一行にまとめたいのですがどうすれば良いでしょうか。

Oracle9iを使用しています。
宜しくお願いいたします。

Aベストアンサー

こんにちわyukio200263さん
以下のSQL文でどうでしょうか?

UPDATE 「テーブル名」
SET 「対象列」= 'あ' || CHR(13) || CHR(10) ||'い'

ちょっと長くなってしまいますが、一行で可能です。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

QEXCELの文字列操作で文字数不足の分をスペースで補う方法

EXCELの文字データを取り出す際に以下のような操作を行いたいんですが、方法をご存知の方がいらっしゃいましたら教えていただけませんでしょうか。

既にデータの入力されているセルの文字数が、ある一定数に満たない場合は不足分を半角スペースで補う

【例】文字数を15と指定したとします
セルに入力されたデータ:山田_ 太郎
   ↓
求めたいデータ:山田_ 太郎_ _ _ _ _ _
(山田の後に半角スペースが1、太郎の後に半角スペースが6つ入っていると仮定してください)

※TEXT関数で数値の文字数不足分を0で埋めるということはできたのですが、TEXT関数は数値のみを対象としているようで・・・。
【例】12345 → 000000000012345

よろしくお願いいたします。

Aベストアンサー

A1に「山田 太郎」が入っている場合、
 =LEFTB(A1&REPT(" ",15),15)
と式を立てればOKです。

LEFBは、左側から指定バイト分(半角1バイト・全角2バイト)を抜き出す関数。
REPTは、所定の文字をくり返す関数です。

Qポートの80と443

こちらのサービス(https://secure.logmein.com/)を利用すると、インターネットを見られるサーバーのポートの80と443が空いていればルータやファイアウォールに特段の設定なく外部からサーバーを操作できるそうですが、逆にサーバーのポートの80や443を空けることには何か危険性があるのでしょうか。

Aベストアンサー

ポート80は一般的なHTTP、ポート443はHTTPSです。
この2つのポートがあいていなければインターネット接続(WEBブラウジング)は出来ません。
ですから、ほとんどのファイアウォールでこのポートは開いています。(インターネット接続を制限している社内LANでは当然閉じていますが)

ちなみに、よく使うポートとしてはFTPで20、21、SMTP(送信メール)で25、受信メールPOP3で110あたりです。セキュリティポリシー上、この辺は制限される事も多いですが、HTTP 80、HTTPS(暗号化用)443は通常閉じません。


危険性?
WEBプロトコルを使ってFTP的なファイル転送(WebDAV)やVPN等も出来るようになっています。当然そこにはある種の危険はつきものですが、WEBブラウジングに伴う危険と大きく変わりません。ウィルス等に感染していればこの2つのポートだけでも相当危険でしょうね。

参考まで。


人気Q&Aランキング