• 締切済み

UTF-8 環境をSJIS化した後の改行コードの取扱がよくわかりません

RedHat Linux ES4 にて、デフォルトUTF-8の文字コードを以下のサイトの手順に従いSJIS化して使用しています。 (サイトの例ではEUC⇒SJISなのですが) http://www.k5.dion.ne.jp/~whatsup/linux/euc_to_sjis.html その後、Windows上でシェルスクリプトなどを作成し、ASCIIでアップロードして実行すると『:bad interpreter: そのようなファイルやディレクトリはありません』となります。 Webで調べたところ改行コードが正しくないとの事なのですが、どうにか回避することは出来ないでしょうか?

noname#138769
noname#138769

みんなの回答

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

漢字コードと改行コードは、一切、関連性がありません。 漢字を一切使わないファイルでも、改行コードを間違うとサーバーでエラーになります。 LinuxやUnixの世界では、改行コードは「LF(ラインフィード、文字コード10)」の1文字です。 MS-DOSやWindowsの世界では、改行コードは「CR(キャリッジリターン、文字コード13)」+「LF(ラインフィード、文字コード10)」の2文字です。 改行が「CR+LF」になっているテキストファイルを、Linuxサーバーにアップロードする場合「CR+LFをLFのみに書き換えてアップロード」する必要があります。ダウンロードの場合はその逆が必要です。 そして、その変換をしてくれるのが、FTPクライアントソフトの「ASCIIで転送(ASCIIモード)」です。 どうやら正しくASCIIモードで転送をしているようなので、問題は、漢字コードや改行コードの変換ではないようです。 漢字コードが違えば文字化けするだけですし、改行コードが違えば「Error 500:Internal Server Error」が出る筈。 「:bad interpreter: そのようなファイルやディレクトリはありません」が出ているとしたら、マジに「そのようなファイルやディレクトリがない」としか思えません。 シェルスクリプトの1行目の「スクリプトを実行すべきシェルの指定」で、シェルの位置が「サーバーのシェルがある位置」になってないのでは? もし、Linuxのシェルが「/user/local/bin/csh」だったら1行目には「#! /user/local/bin/csh」と書かないとならないし、「/bin/csh」だったら1行目には「#! /bin/csh」と書かないとならないですよ。 ここを間違うと、httpdが起動すべきシェルを見失います。

noname#138769
質問者

お礼

ありがとうございます。 とりあえず自己解決しました。 というか、細かい事はよくわからないのですが、エディタにて 改行コードとして『LF+CR』でなく『LF』として保存しなおしてBINARYモードで転送したら実行できるようになりました。 様々なパターンを試しましたが、実行できたのは 文字コード:SHIFT-JIS、改行コード:LF、転送モード:BINARY の組合せのみでした。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

UTF-8かSJISかということと、行末のコードが どうなのかは関係ないのですがそれはおいといて。 > ASCIIでアップロードして実行すると とありますけど、ftpで転送しているのでしょうか? だとしたら本当にasciiモードになっていますか? od とか hexdumpを使って行末がどうなっているか確かめて、 本当にCR+LFになっているのなら、 tr -d '\013' < スクリプト >別のファイル でCRを消すとか。 perl -i.bak -pe 's/\r//g' スクリプト とかでもできます。

noname#138769
質問者

お礼

ありがとうございます。 とりあえず自己解決しました。 というか、細かい事はよくわからないのですが、エディタにて 改行コードとして『LF+CR』でなく『LF』として保存しなおしてBINARYモードで転送したら実行できるようになりました。 様々なパターンを試しましたが、実行できたのは 文字コード:SHIFT-JIS、改行コード:LF、転送モード:BINARY の組合せのみでした。

関連するQ&A

  • おはよう御座います!SJISの改行について!

    お世話になります。 自分のサイトに日記機能を付けたんですけど、改行出来なくて困ってます。 書いた日記を SJIS → EUC-JP に変換を行いDBへ格納しているんですけど、そこで携帯の改行を使っても改行されないまま格納されてしまいます。。。 携帯の改行を\nに変えるみたいな関数ってありますか! 色々見ましたけど分かりやすいのありませんでした。

    • ベストアンサー
    • PHP
  • utf-8のマシンでsjisのデータファイルを読込み、eucでファイルに出力する方法

    utf-8のLinuxマシンで、sjis(改行コードCR+LF)のデータファイルを読込み、euc-jp(改行コードLF)でファイルに出力したいのですが、どのようにすればよいでしょうか。プログラム実行前後に入出力ファイルを直接コード変換することは考えておらず、全て一つのプログラム内でやりたいと考えています。 &jcode'convertで変換するのかなと思っているのですが、読込み時・書き込み時のどちらでやるべきなのか、あるいは両方やるべきなのか分かりません。データには、「・」「I,II」などの特殊文字(?)が含まれているので、それらの文字で問題が起きないかなどもちょっと心配です。 また、&jcode'convertでeucに変換すれば、改行コードも一緒にCR+LFからLFに変換されるものでしょうか。 文字コードのことがよく分かっていないので、的外れな質問になっているかもしれませんが、ご教示願います。

    • ベストアンサー
    • Perl
  • SJIS→UTF-8の文字コード変換

    Perlで、SJISの16進で表記された文字があるのですが、それがうまく表示できません。 Unicodeの16進文字コードだとうまく表記できるのですが…。 以下がスクリプトです。 以下の場合だと。(句点)がSJISだと0x8142で、 その16進文字列を表示したいのですが、実行結果にあるエラーが出てしまいます。 Unicodeだと。は0x3002なのですが、うまく表示できています。 すみませんがよろしくお願いします。 ---------------------------------------- # このファイルの文字コードはSJIS # 改行コードはLF # # 。 SJIS 0x8142 # Unicode 0x3002 # use Jcode; use encoding "sjis"; $a = 0x8142; $a = Jcode->new($a, "sjis")->utf8; printf("句点の表示…%c\n",$a); printf("句点の表示…%c\n",0x3002); ---------------------------------------- 実行結果 "\x{8142}" does not map to shiftjis at test.pl line 14, <DATA> line 846. 句点の表示…\x{8142} 句点の表示…。

    • ベストアンサー
    • Perl
  • VB6のテキスト処理 さまざまな文字コード/改行で対応

    VB6のテキスト処理で、Open InputとLine inputを使った場合に 文字コード/改行コードが SJIS/CRLFの時は正しく1行を読み込む事ができますが、改行がLFの時は正しく1行を読み取りません。 改行コードがLFもしくはCRの場合でも正しく1行を読み取る方法はあるのでしょうか? また、文字コードに関してもEUCやUTF-8,JISでも対応できる方法がありましたら教えて下さい。

  • bad interpreterで、シェルが使えません(T_T)

    RedHat9ではよく以下のような胃の痛いような エラーがでます。 rootでシェルが実行できないのですが、 どうすれば実行できるでしょうか? ■1.shというシェルファイル #!/bin/sh /bin/touch 1 ■1.shを実行するとエラーになります。。 # ./1.sh : bad interpreter: そのようなファイルやディレクトリはありません ■cronでも動きません。。 /bin/bash: 1.sh: /bin/sh: bad interpreter: No such file or directory

  • 改行コードCR(\r)をアンダースコア(_)に変換

    AIX、Kシェルです。 ファイルに出力された改行コードCR(\r)をアンダースコア(_)に変換したいのですが、 文字コードSJISだと期待通りの結果になるのですが、UTF-8だと全角の手前で止まってしまいます。 試したコマンドは下記です。 cat file.txt | tr "\r" "_" > tmpfile ex) file.txt(最終行は半角spaceと全角space) 10(改行コード=LF) 11(改行コード=CRLF) 12(改行コード=CR) 1(改行コード=LF) 2(改行コード=CRLF) 3(改行コード=CRLF) ああ(改行コード=CRLF)  (改行コード=CR) 【結果】tmpfile 10(改行コード=LF) 11_(改行コード=LF) 12_1(改行コード=LF) 2_(改行コード=LF) 3_(改行コード=LF) ああ_(改行コード=LF)  _ これがUTF-8だと12までは変換できるのですが、以降が出力されません。 UTF-8でも最後まで変換されるようにするにはどうすれば良いのでしょうか? 初心者で申し訳ありません。 お手数ですが、何卒宜しくお願い致します。

  • 文字コードの選択

    PHP+HTML(XML)をするにおいて、最も良い文字コードは何にしたら良いでしょうか?さいきん,特に  UTF-8,UTF-16 を聞きますが、  EUC,SJISなどの方が良いのでしょうか? また、それらの特徴とは,どのようなものでしょうか?  ASCIIも良いのでしょうか?

    • ベストアンサー
    • HTML
  • テキストファイルの改行コードの確認方法

    某サポートとのやりとりで以下のようなのがありました。 ---引用--- お客さまからご提供いただきました以下の設定ファイルは、 文字コードがUTF-8、改行コードが CRLF に設定されていましたが 正しくは、文字コードはUTF-8、改行コードは LF になります。 現在サーバに置かれている設定ファイルの改行コードが LF に なっているかをご確認ください。 ※ 確認手順に関しましては、誠に恐れ入りますが、 Webのリソース等をご確認いただけないでしょうか。 ---------- Linuxマシンにおいてあるテキストファイルの改行コードを確認する方法を教えてください。 OSのバージョンは下記の通りです。 Red Hat Enterprise Linux ES release 2.1 (Panama) Kernel 2.4.9-e.27 on an i686 トレンドマイクロのサポート冷たいよ。ぼそっ

  • 改行コードについて

    改行コードがよく解らないので説明お願いします 様々なサイトの改行コードの説明で LinuxはLF MacはCR WindowsはCRLFと説明しています 私の認識では LF=\n CR=\r CRLF=\r\n だと思っていました ここで疑問なのですが 確かに私の利用した環境ではLinuxの改行コードは\n, Windwosの改行コードは\r\nでした ところがMacの標準のメモ帳(テキストエディット)で文字を入力しても改行コードは\nです 確認方法は od -cというコマンドとfileというコマンドです これはつまりCRではなくLFということですよね? では、なぜ多くのサイトではMacはCRと説明しているのでしょうか? そもそもCR=\rという認識が間違ってるのでしょうか? よろしくお願いします

  • euc-jpからutf-8の文字コード変換について

    現在、何らかのhtmlを取得する際にはurf-8で統一しようと思っているのですが、 たとえば <?php $f=file_get_contents("http://blog.livedoor.jp/dqnplus/")//文字コードEUC-JP; $f = mb_convert_encoding($f,"utf-8","eucjp-win,utf-8,sjis-win,EUC-JP"); echo $f; ?> では、EUC-JPからの変換がうまくいきません。 ……というより、EUC-JPのエンコーディングのみ失敗してしまいます。 (文字化けしたもののみ抽出すると、すべてEUC-JPでした) どのようなコードを書けば、正常にエンコードできるでしょうか。 どなたかご教示のほど、どうかよろしくお願いいたします。

    • 締切済み
    • PHP