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

FTP SJIS 能など(2バイト目5C)文字 転送エラー

お世話なります。

FTP転送において、ファイル名に能、表など(2バイト目が5C)を含むファイルをFFFTP、ALFTP等で転送しようとすると、応答コード550の転送エラーとなります。

Shift-JISで能・表などの2バイト文字を扱う場合、2バイト目が5Cだと、5Cが「\」と認識され
エスケープ文字になってしまう問題は有名のようですが、
どうすれば等不具合は解消できますでしょうか。

環境はRedhatでシステム文字コードは「/etc/sysconfig/i18n」を確認したところUTF-8です。
別のSoralis環境では文字コード「/etc/default/init」を確認したところで、
SJISですが、問題なく当該文字を転送できます。

ということはFTPサーバプロセスがSJIS文字を、認識するのにUTF-8に変換する過程で読み取れずにエラーということでしょうか?

ご教示いただけたら幸いです。

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

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

A 回答 (3件)

何をしようとしているか(なんのためにそんなことをしようとしているか)


がわからないのですが、

 そもそも日本語を含むファイル名のファイルをFTPでサーバにアップロードしようとしていること自体が痛いと言わざるを得ません。

 どうしてもやりたいならFFFTPというソフトにそれに対応した機能があります。ホストの設定を登録するときに、

「ホストの設定」→「文字コード」タブ→「ファイル名の漢字コード」

 という項目のところにサーバ側でのファイル名の漢字コードを指定する箇所があり、ここで指定したファイル名に変換してアップロードしてくれます。

 しかし先ほども述べましたように、日本語ファイル名をLinuxホストにアップロードするという行為は多少ITをかじった人から見ると少し「痛い」行為に見えることは自覚しておいてください。

 なお、完全にどっぷりつかったIT技術者であれば「まあ別にそれもいいんじゃないか?」と言って許容してくれるどころか、相談する相手によってはたちどころに解決してくれたりするかもしれませんが、それはその人の厚意であって、当たり前のことではありませんのでご注意ください。

 日本語ファイル名をサーバにアップロードして、何に使用されるおつもりですか?

この回答への補足

回答ありがとうございます。

業務でドキュメントをサーバ管理しており、その際にFTPを使用しているのですが、
サーバ移行に伴い、前はSolaris環境で行っていたものをRedhad環境で行うようになったため、
発覚した不具合です。

FFFTPでホスト設定を行ったところ、ファイル自体はアップロードできました。
しかし、Redhatのシステムの文字コードはUTF-8なのですが、ファイル自体はShift-JISで管理のため、
FFFTP、Teratermなどの表示で文字化けしてしまいます。

2バイト目が5Cになっている文字以外は問題なくやりとりができるのですが、表や能など2バイト目が5Cのものはやりとりできません。

当問題は運用でカバーも視野にいれて考えたいと思います。

補足日時:2010/07/14 19:06
    • good
    • 0
この回答へのお礼

FFFTPの上記設定で転送することはできましたので、
管理しているファイルは基本Shift-JISなのでFFFTPやteratermの表示設定、環境変数LANGはShift-JISなのですが、日本語ファイル名に関してはファイル名をUTF-8に変換して転送し、管理することにしました。

ありがとうございました。

お礼日時:2010/07/14 19:58

FTPというプロトコルには相手側の文字コードを


問い合わせるコマンドはありません。また、
文字コードを指定するコマンドもありません。
例えば、ファイルを送る場合は「STOR ファイル名」
ですが、「ファイル名」のところをどう解釈するか
ということです。サーバ側は多数の相手をするので、
クライアント側が合わせてあげないと無理でしょう。
「put ファイル名」などコマンドを記録したテキスト
ファイルを作り、UTF-8に変換してFTPに食わせる等の
方法をとるべきかと思います。

この回答への補足

回答ありがとうございます。

仕組みがわかりました。

UTF-8にしてWindowsのftpコマンドで食わしてもファイル名自体はShift-JISですので、
ファイルが無いエラーとなりました。

説明不足で申し訳ありません。

Linuxの文字コードはUTF-8ですが、ファイル自体はShift-JISのまま扱いたいのです。

UTF-8のLinuxがShift-JISのファイル名を認識するには、FTP転送処理の内部で、表\.txtのようなエスケープをした状態で転送すれば認識してくれそうな気がしますが、難しいでしょうか。

最新のFFFTP、ALTFTPでも不可でした。以下ページでALTFTPでは転送できるようなことがありますが、だめでした。
http://labs.laurahouse.net/syncmemo/introductionjp

補足日時:2010/07/14 18:58
    • good
    • 0

バイナリーモードで転送してみては?

この回答への補足

回答ありがとうございます。

バイナリモードで転送しても結果同じでした。

説明不足ですみません。

補足日時:2010/07/14 18:47
    • good
    • 0

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

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

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

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

QFTP接続時の文字化け(CentOS6.5)

いつも困った時は利用させて頂いております。
今回もよろしくお願いします。

CentOSにVsftpdをインストールして、コマンドプロンプトでFTP接続したのですが、
lsコマンド実行後、ファイルやディレクトリ名が文字化けしてしまって困っています。
pwdコマンドは、普通に表示されます。

Linuxの勉強の為、ノートパソコンにVMwarePlayerをインストールして、
CentOS6.5で色々試していました。
Vsftpdをインストールして、FTP接続できたのですが、文字化けしていました。
コマンドプロンプトで文字コードを変更したり、CentOSのi18nを変更したりと、
試しているのですが、直りません。

今もネットで調べつつ試行錯誤を繰り返していますが、
なかなか改善しませんので、質問させていただきました。

よろしくお願いします。

Aベストアンサー

>経緯を以下に載せます。

Linux上で作成した日本語ファイル名が、Windowsの標準のftp.exeで文字化けするということでしょうか。
試してみましたが、私の所では、chcp 65001 で表示できています。
chcp 65001 したときとしないときで、表示されるものが変わる場合は、コマンドプロンプトのウィンドウがUnicodeのフォントになっていないのでは?MS ゴシックとかになっていますか?
1.コマンドプロンプトを起動して、その状態でプロパティでフォントをMSゴシックに
2.chcp 65001
3.ftp して ls
4.コマンドプロンプトに戻ったら、jp でシフトJISに戻る

Q日本語ファイル名のFTPについて

お世話になります。

日本語ファイル名のFTPを行っているのですが、ファイル名が文字化けして困っております。
解決策をご存知の方が、いらっしゃいましたら解決するための情報を頂けますでしょうか。

私が、使用しているのは、以下の環境となります。

【サーバ環境(FTP元、FTP先ともに同様となります。】
centOS5.5.
jdk1.6

ftpを行う際、以下のようにして文字コード、転送モードを指定しております。
fp.setFileType(FTPClient.BINARY_FILE_TYPE);
fp.setControlEncoding("UTF-8");

// ファイル送信
is = new FileInputStream(clientFilePath);// クライアント側
fp.storeFile(putFilePath, is);// サーバー側

String putFileNm = new File(putFilePath).getName();
String parentPath = new File(putFilePath).getParent();
String[] flist = fp.listNames(parentPath);
for(int i=0; i<flist.length; i++) {
if(putFileNm.equals(new File(flist[i]).getName())){
return true;
}
}

FTP元、FTP先のサーバの文字コードも
echo $LANGで確認しましたが、両方とも「ja_JP.UTF-8」になっております。

お手数お掛け致しますが、ご教授の程よろしくお願い致します。

以上、よろしくお願い致します。

お世話になります。

日本語ファイル名のFTPを行っているのですが、ファイル名が文字化けして困っております。
解決策をご存知の方が、いらっしゃいましたら解決するための情報を頂けますでしょうか。

私が、使用しているのは、以下の環境となります。

【サーバ環境(FTP元、FTP先ともに同様となります。】
centOS5.5.
jdk1.6

ftpを行う際、以下のようにして文字コード、転送モードを指定しております。
fp.setFileType(FTPClient.BINARY_FILE_TYPE);
fp.setControlEncoding("UTF-8");

// ファイル送信
is = ...続きを読む

Aベストアンサー

確認する環境がないので
すごくてきとーに言ってしまうこと
最初に謝るわね。

JavaのソースをUTF-8で書いてみるとか
実行オプションでUTF-8指定してみるとかどうかしら。

それと文字化けは具体的にどんな文字に?
もしかして復元可能だったりしないかなと。

いっそのこと
取得後名前を変えればいいんじゃないかしら
と思ってみる。

Qサーバーに転送したファイルが0kbになってしまうのは、なぜ??

レンタルサーバー上に、ホームページを持っています。
そのホームページを更新しようと、新しいファイルを転送したところ、転送途中でエラーが起きました。
エラーが起きながらも更新ファイルは送られていたのですが、なぜか0kbになっていて、IEで見ると当然ですが真っ白です。
FTPソフトを変えて転送してみましたが、同じ症状が起きます。
最初は、ドリームウィーバーで作ったファイルを、ドリームウィーバーの転送機能を使用して転送しました。
次は、転送だけホームページビルダーの転送機能を使用しました。
今までこの方法でエラーが起きたことはなかったのですが、、、実は1ヶ月前にPCが故障して、今回は修理から戻ってきて初めての転送でした。
PCの設定に何か問題があるのでしょうか?
どなたか、お助けくださいませ!

Aベストアンサー

結構なりますよ。
単に、通信途中でエラーが生じたってやつです。
一旦サーバ上からその0kbのファイルを削除して再送してください。
ちゃんと送れるはずです。

QFTPコマンドについて(Windowsのコマンドプロンプト)

windowsXPのDos窓からftp ipアドレスを入力し、get ファイル名を
入力すると「最近使ったファイル」の中にファイルがダウンロードされます。ネットで調べたところ、現在の作業場所にダウンロードされる。とのことのようなのですが、これは現在の作業場所が最近使ったファイルということなのでしょうか?また、これだと不便なので、ダウンロード先に
デスクトップ等を指定できませんでしょうか?(Ffftp等のツールは使わずDos窓での入力で)どなたか教えて下さい。

Aベストアンサー

 FTPサーバーにログオンする前に、デスクトップなど作業ディレクトリに移動しておくのが一番簡単なのですが、FTPにログオンした後からでも「lcd」コマンドでローカルディレクトリを変更できます。

 FTPでログオンした後に
lcd C:\Documents and Settings\ユーザー名\デスクトップ
 とすればOKです。

 現在の作業ディレクトリを確認したい場合は、引数なしで「lcd」とだけ入れれば画面に表示されます。

参考URL:http://www.osumi.or.jp/Information/FTP/FTP.HTM#lcd

Qftpコマンドの戻り値をチェックしたい

現在業務でftpコマンドを用いたバックアップシェルを作成しております。(RHEL4)
クーロンでシェルAを呼び、シェルA内でftpコマンド発行→ファイルB内のftpコマンドを実行→シェルAに戻る、という仕様ですが、このftpコマンドが成功したのか失敗したのかをプログラム上で判断する方法はありますでしょうか?

Aベストアンサー

shogo0809さんの回答に便乗します。
実行ログをファイルに落としてgrepするのがよいと思います。
以前、似たような質問があったので
具体的な手順は参考URLのほうを見てはどうでしょうか?

→シェルスクリプトでFTPの実行結果を取得するには

参考URL:http://oshiete1.goo.ne.jp/qa2656080.html

Q日付型カラムへのデータINSERT

お世話になります。ひとつご教授ください。

オラクル10g, ojdbc14でjdk1.4.2から接続です。

INSERT命令を使ってテーブルにレコードを追加する際に、DATE型のカラムに対して

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27 12:00:00', ...);

を実行するとエラーORA-01861が出ます。そこで

INSERT TABLE_A (DATE1, ...) VALUES ('2006-4-27', ...);

このように記述して再度実行すると通ります。

このようなとき、時間の部分まで設定した値をカラムに格納したいときはどうしたらよろしいでしょうか?

よろしくお願いします。

Aベストアンサー

ごめんなさい。
説明と文例が違ってしまいました。
正しくはこちらです。

INSERT TABLE_A (DATE1, ...) VALUES (to_date('2006-4-27 12:00:00','yyyy/mm/dd hh24:mi:ss'), ...);
というように、to_date関数を使うのが一般的かと思います。

Q【フォルダ名の文字コードを変換したい】

【フォルダ名の文字コードを変換したい】

Windows Vistaです。

Windowsではフォルダ名にShift-JISを使っていますが、とあるプログラムが日本語を読み込む際、文字コードがUTF-8でないと読み込めないようで、フォルダ名に日本語を含むフォルダを参照すると文字化けしてしまいます。
なのでフォルダ名をUTF-8に変換したいです。

検索するとLinux上でShift-JISのフォルダ名をUTF-8にしたり、Windows上でもファイルの内容をShift-JISからUTF-8に変換したりする方法は見つかるのですが、Windows上でフォルダ名をUTF-8に変換する方法が見つかりません。
UTF-8に変換するとエクスプローラ上では文字化けするので、需要がないのでしょうか。
コマンドプロンプトとか苦手なので、何かフリーソフトでもあればいいのですが…

Aベストアンサー

>間違いなくUTF-8です。
了解しました。そんなソフトもあるのですね、初めて知りました。

>Shift-JISとかUTF-8とか関係なく、バイナリ的にフォルダ名を変更することはできないのでしょうか。
できません。
Windowsのファイル/フォルダ名はUnicodeで記録されています。
それを、WindowsのAPIか何かで普通に読むと、OSの言語に応じて標準の文字コードに変換された値が返ります。日本語ではShift_JISです。
ソフトから読めるのはこの変換された状態のデータだけです。変換結果はShift_JISで解釈できる値のみしか含まれないので、UTF-8で読める値にすることはできません。

QFTPで見えるファイルと見えないファイルがあります。

FTPで見えるファイルと見えないファイルがあります。

CentOS5.4にvsftpdをインストールして、PCからFTP転送を行おうとしています。
/tmpディレクトリにファイルを転送すると、FTPツールに転送したファイルは表示されますが、
元々/tmpにあったファイルはFTP転送ツールに表示され無い状態となっています。

・FTP転送ツールを再起動しましたが、転送したファイルしか見えません。
又、FTP転送ツールではなく、DOS窓上でFTP接続して、DIRで見た時も転送したファイルしか見えません。
このことから、FTPツールの問題ではなく、FTPサーバー側の問題を判断しました。

・Linuxサーバを再起動しても、転送したファイルしか見えません。
・Linuxサーバ上で、転送したファイルを"cp -p"でコピーした場合、コピーしたファイルはFTPツール上見えません。


現在Linux上では、

tmp>ll
-rw-r--r-- 1 root root 2 5月 13 17:20 a1.txt
-rw-r--r-- 1 root root 2 5月 13 17:20 a2.txt
-rw-r--r-- 1 root root 2 5月 13 17:20 b1.txt

となっているのですが、
a1.txt:FTP転送したファイル
a2.txt:a1.txtを cp -p a1.txt a2.txtでコピーした
b1.txt:viで作成した

FTPコマンドで見ると、
ftp> dir
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 2 May 13 08:20 a1.txt

というようにa1.txtしか見えません。

原因はわかりましたらご教授ください。よろしくお願いいたします。

FTPで見えるファイルと見えないファイルがあります。

CentOS5.4にvsftpdをインストールして、PCからFTP転送を行おうとしています。
/tmpディレクトリにファイルを転送すると、FTPツールに転送したファイルは表示されますが、
元々/tmpにあったファイルはFTP転送ツールに表示され無い状態となっています。

・FTP転送ツールを再起動しましたが、転送したファイルしか見えません。
又、FTP転送ツールではなく、DOS窓上でFTP接続して、DIRで見た時も転送したファイルしか見えません。
このことから、FTPツールの問...続きを読む

Aベストアンサー

SELinuxの設定ってどうなっています?

ls -Z /tmp
とした場合、どうなりますか?

QSIDとSERVICE_NAMEの違いとは?

tnsnames.oraの中の(CONNECT_DATA=に SIDだったりSERVICE_NAMEだったりしますが、どのような違いがあるのでしょうか?
どちらでもつながるのでいいかとは思いますが、何かメリット・デメリットでもあるのでしょうか?
それとも過去の遺物が未だ共存しているだけでしょうか?
SIDはインスタンスにつけられた名前だと知っていますが、SERVICE_NAMEってなんですか?

Aベストアンサー

SIDはインスタンスの識別子、service_nameはサービス名。
インスタンスとサービスの違いはRAC を勉強されるとよくわかると思います。

サービス名は初期化パラメータのservice_namesで設定します。
設定されていない場合は先述のとおりdb_unuque_name.db_domainになります。
(これが同義と誤解されやすい原因となっているわけですが)

ところで、service_namesパラメータですが、複数形になっていることからもわかるように、複数のサービス名をコンマ区切りで指定できるようになっています。

これをこのように使います。

2ノードRAC環境で、インスタンス1(SID=hoge1)、インスタンス2(SID=hoge2)があったとします。
ノードを意識することなく接続できるようにするためにクライアント側のtnsnames.oraにはこんな設定を追加します。

HOGE.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = hoge.example.com))
)

インスタンス1とインスタンス2のservice_namesパラメータにhoge.example.comを追加します。すると、インスタンス1とインスタンス2にラウンドロビンで接続できるようになります。

ここで、もしtnsnames.oraのservice_name=...がSID=hoge1だったらどうなるでしょう?
インスタンス2のSIDはhoge2ですから一致せず、インスタンス2には接続できず、いつもインスタンス1に繋がってしまいます。

次に、一時的にメンテナンスのためにインスタンス2にアクセスしてほしくないケースを考えます。service_nameであれば、インスタンス2のservice_namesパラメータからhoge.example.comを削除することで(動的に変更できます)直ちにインスタンス1にのみ接続されるようにできます。

ここで、もしORACLE_SIDだったら・・・変更のためにインスタンスの再起動が必要になってしまいますね?

最後にservice_namesは複数登録できます。3ノードRAC環境において、オンライン処理(service_name=ONLINE)、バッチ処理(service_name=BATCH)があったとします。
バッチ処理は1つのノード(インスタンス1)でのみ処理したいとします。オンライン処理は3つのノードでしたいとします。

そんなとき、service_nameであれば、

<<サーバ側の初期化パラメータ>>
1:service_names = online, batch
2:service_names = online
3.service_names = online

<<クライアント側のtnsnames.ora>>

オンライン処理
ONLINE.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = online.example.com))
)

BATCH.EXAMPLE.COM
(DESCRIPTION =
(LOAD_BALANCE = ON)
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
(CONNECT_DATA = (SERVER = DECIDATED)(SERVICE_NAME = batch.example.com))
)

と、クライアント側では接続先サーバを気にすることなく構成できますね?
BATCHのノードを1から2にしたい場合の変更はサーバ側のみでできますよね?
serivce_namesの"batch"設定をノード2に移すだけです。

SIDはインスタンスの識別子、service_nameはサービス名。
インスタンスとサービスの違いはRAC を勉強されるとよくわかると思います。

サービス名は初期化パラメータのservice_namesで設定します。
設定されていない場合は先述のとおりdb_unuque_name.db_domainになります。
(これが同義と誤解されやすい原因となっているわけですが)

ところで、service_namesパラメータですが、複数形になっていることからもわかるように、複数のサービス名をコンマ区切りで指定できるようになっています。

これをこのように...続きを読む

Qコマンドプロンプトの文字化け

コマンドプロンプトで文字化けします。
「dir」などのコマンドを打ってみたところ、英語のフォルダ名は表示されるのですが、日本語のフォルダ名が「□□□」となり文字化けしています。

文字化けしているところをコピーし、メモ帳に貼り付けたところ、日本語のフォルダ名もきちんと表示されます。


jp[Enter]を行っても、やはり変わりがありません。
「規定値」-> コードページを確認したところろ、「932(ANSI/OEM - 日本語 Shift-JIS)」となっています。
chcpコマンドを使い、文字コードをutf-8にしても変わりませんでした。

PC環境は、Windows 7 Professional 32bitとなっております。

どうすれば日本語を表示できるか教えていただけますでしょうか。

Aベストアンサー

>文字化けしているところをコピーし、メモ帳に貼り付けたところ、日本語のフォルダ名もきちんと表示されます。
であれば問題はコードページではなくフォントですね。
Windows7でも同じか分かりませんがXPでのフォントの変え方は、
メニューバー右クリックから「プロパティ」の「フォント」です。「ラスタフォント」か「MSゴシック」か、どちらでもほぼ同じ結果になると思います。


人気Q&Aランキング